Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么不';我被警告要使用扫描仪';资源泄漏';什么时候在课堂上宣布?_Java_Memory Leaks_Java.util.scanner - Fatal编程技术网

Java 为什么不';我被警告要使用扫描仪';资源泄漏';什么时候在课堂上宣布?

Java 为什么不';我被警告要使用扫描仪';资源泄漏';什么时候在课堂上宣布?,java,memory-leaks,java.util.scanner,Java,Memory Leaks,Java.util.scanner,当我编写这样的代码时: void methodName(){ Scanner sc = new Scanner(System.in); int inp = sc.nextInt(); System.out.println(inp); } class MyClass{ Scanner sc; void methodName(){ sc = new Scanner(System.in); int in

当我编写这样的代码时:

void methodName(){
        Scanner sc = new Scanner(System.in);
        int inp = sc.nextInt();
        System.out.println(inp);
}
class MyClass{
    Scanner sc;

    void methodName(){
        sc = new Scanner(System.in);
        int inp = sc.nextInt();
        System.out.println(inp);
    }
}
我收到一个“资源泄漏”警告,建议我关闭
扫描仪
实例。但是当我在方法之外定义
sc
时,如下所示:

void methodName(){
        Scanner sc = new Scanner(System.in);
        int inp = sc.nextInt();
        System.out.println(inp);
}
class MyClass{
    Scanner sc;

    void methodName(){
        sc = new Scanner(System.in);
        int inp = sc.nextInt();
        System.out.println(inp);
    }
}
我没有收到“资源泄漏”警告,为什么


另一个小问题,如果我做
sc=null
,我想
扫描器
对象将有资格进行垃圾收集,因为它不再被引用,从而释放内存,对吗?所以是
sc=null足以解决“资源泄漏”,而无需
sc.close()

首先,在方法末尾,
sc
不在范围内。因此,我们期望它将被关闭*

在第二个实例中,由于
sc
是类级字段,因此它将保留在方法末尾的范围内。因此,我们期望它将用于其他方法,并在更合适的时间关闭

*不建议关闭
扫描仪
s从
系统中读取。
会禁止进一步的键盘输入


编辑(刚刚看到您的后续问题):垃圾收集器只释放内存。它也不会清理对象持有的其他资源(文件句柄、网络连接、锁等)。

首先,在方法末尾,
sc
不在范围内。因此,我们期望它将被关闭*

在第二个实例中,由于
sc
是类级字段,因此它将保留在方法末尾的范围内。因此,我们期望它将用于其他方法,并在更合适的时间关闭

*不建议关闭
扫描仪
s从
系统中读取。
会禁止进一步的键盘输入

编辑(刚刚看到您的后续问题):垃圾收集器只释放内存。它也不会清理对象持有的其他资源(文件句柄、网络连接、锁等)