我有一个程序在java中,我必须得到用户输入,但是,我只需要获得用户输入一次,之后,我不再需要扫描仪。执行以下操作:如何仅使用扫描仪一次然后摆脱它?
int userInput = new Scanner(System.in).nextInt();
给了我一个资源泄漏的警告,称<unassigned closeable value> is never closed
。
是否有另一种方式我可以只使用扫描仪一次,然后摆脱它,所以没有资源泄漏?也许类似于C#的using
声明。
我有一个程序在java中,我必须得到用户输入,但是,我只需要获得用户输入一次,之后,我不再需要扫描仪。执行以下操作:如何仅使用扫描仪一次然后摆脱它?
int userInput = new Scanner(System.in).nextInt();
给了我一个资源泄漏的警告,称<unassigned closeable value> is never closed
。
是否有另一种方式我可以只使用扫描仪一次,然后摆脱它,所以没有资源泄漏?也许类似于C#的using
声明。
相当于C#的using
是try-with-resources。不要使用它,它会关闭System.in
,你不想那样做。忽略这个特殊情况的警告。让垃圾收集器声称Scanner
并保持原样输入标准输入。
我可以看到以下两个选项: 选项#1:一读完输入一次就明确关闭扫描仪。
Scanner sc = new Scanner(System.in);
int userInput = sc.nextInt();
sc.close();
选项#2:使用try-与资源声明
try(Scanner sc1 = new Scanner(System.in)) {
int userInput1 = sc1.nextInt();
}
的选项#2的缺点是,它会关闭中存在的尝试与 - 资源语句的所有资源,其中包括System.in。
Java自动垃圾收集。自动垃圾收集是查看堆内存的过程,可以识别哪些对象正在使用,哪些不是,以及删除未使用的对象。一个正在使用的对象或一个被引用的对象,意味着你的程序的某个部分仍然保持着一个指向该对象的指针。未使用的对象或未引用的对象不再被程序的任何部分引用。所以未被引用的对象所使用的内存可以被回收。
这意味着你不必担心这种类型的警告。此外,在Eclipse
中,您可以使用@SuppressWarning
来消除恼人的警告。