Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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 当在类数据字段中声明Scanner变量时,什么是没有资源泄漏的?_Java_Java.util.scanner_Resource Leak - Fatal编程技术网

Java 当在类数据字段中声明Scanner变量时,什么是没有资源泄漏的?

Java 当在类数据字段中声明Scanner变量时,什么是没有资源泄漏的?,java,java.util.scanner,resource-leak,Java,Java.util.scanner,Resource Leak,当我写这篇文章时: import java.util.*; public class Test { // static Scanner input = new Scanner(System.in); static double y; public static void main(String[] args) { double x = someMethod(5); } private static double someMethod(in

当我写这篇文章时:

import java.util.*;

public class Test {

//  static Scanner input = new Scanner(System.in);
    static double y;

    public static void main(String[] args) {
        double x = someMethod(5);
    }

    private static double someMethod(int nr) {
        Scanner input = new Scanner(System.in);
        try {
            y = input.nextDouble();
        } catch (InputMismatchException e) {System.out.println("Type in a double");}
        return y + nr;
    }
}
import java.util.*;

public class Test {

    static Scanner input = new Scanner(System.in);
    static double y;

    public static void main(String[] args) {
        double x = someMethod(5);
    }

    private static double someMethod(int nr) {
        try {
            y = input.nextDouble();
        } catch (InputMismatchException e) {System.out.println("Type in a double");}
        return y + nr;
    }
}
我收到“资源泄漏”错误消息

但当我写这篇文章时:

import java.util.*;

public class Test {

//  static Scanner input = new Scanner(System.in);
    static double y;

    public static void main(String[] args) {
        double x = someMethod(5);
    }

    private static double someMethod(int nr) {
        Scanner input = new Scanner(System.in);
        try {
            y = input.nextDouble();
        } catch (InputMismatchException e) {System.out.println("Type in a double");}
        return y + nr;
    }
}
import java.util.*;

public class Test {

    static Scanner input = new Scanner(System.in);
    static double y;

    public static void main(String[] args) {
        double x = someMethod(5);
    }

    private static double someMethod(int nr) {
        try {
            y = input.nextDouble();
        } catch (InputMismatchException e) {System.out.println("Type in a double");}
        return y + nr;
    }
}
它确实有用。为什么在类数据字段上定义输入扫描程序时没有资源泄漏


在数据字段中声明变量与在方法中声明变量有什么区别?

当您有
扫描仪输入=新扫描仪(System.in)时
在该方法中,每次调用该方法时,您都会创建一个
新扫描程序
实例,并且只使用一次。这会产生垃圾,因为现在你会有一个新的扫描器,每次你使用这个方法时,它就不再被使用了


如果您在类中实例化
扫描器
,则只需创建一次,然后重新使用它,以防止程序产生垃圾。

一个
系统。在
中,扫描器是全局的,两个
扫描器
永远不能进行垃圾收集。因此,资源只泄漏一次,并在JVM退出时被清除。与
System.in
System.out