当我写的时候:
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;
}
}
它确实起作用。在类数据字段上定义输入扫描程序时,为什么没有资源泄漏?
在数据字段上声明变量与在方法中声明变量之间有什么区别?
当方法中有Scanner input = new Scanner(System.in);
时,您正在创建new Scanner
实例每次,该方法被调用,并且仅使用一次。这会造成垃圾,因为现在您将拥有一个新的扫描仪,而每次使用该方法时,它都不再使用。
如果改为在类中实例化Scanner
,则创建一次,然后重用,以防止程序产生垃圾。