Visual Studio Code中的Java资源泄漏

编程语言 2026-07-09

资源泄漏:'sc' 从未被关闭,应该如何处理这个警告?我的程序运行正常,但这个警告让我分心。

import java.util.*;
public class takingInput{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);

        // String name = sc.nextLine();
        // System.out.println(name);

        //int number = sc.nextInt();
        //System.out.println(number);

        float price = sc.nextFloat();
        System.out.println(price);
   }
}

解决方案

这个警告在技术上是正确的。Scanner 实现了 Closeable,因此静态分析工具会在你从不关闭它时发出警告。

你的代码之所以能工作,是因为在 main() 结束后JVM会立即退出,但IDE仍然将其标记为潜在的资源泄漏。

正确的修复是:

import java.util.*;

public class TakingInput {
    public static void main(String args[]) {

        try (Scanner sc = new Scanner(System.in)) {

            float price = sc.nextFloat();
            System.out.println(price);

        }
    }
}

这被称为 try-with-resources。Java会自动关闭 sc

有一个重要细节:

sc.close();

也会关闭 System.in

所以在小型初学者程序中这没问题,但在较大的应用程序中,你有时会刻意不关闭从 System.in 创建的 Scanner,因为那样会使后续的控制台输入不可用。

这就是为什么有些开发者会在极小的控制台应用中直接忽略这个警告。但最干净的现代Java做法是上面提到的 try (...) 版本。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章