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