我有一个java程序,我必须得到用户输入,但是,我只需要输入一次用户输入,之后我就不再需要扫描仪了。执行以下操作:
int userInput = new Scanner(System.in).nextInt();
给我一个资源泄漏警告,说<unassigned closeable value> is never closed
。
还有另外一种方法我只能使用一次扫描仪,然后摆脱它,所以没有资源泄漏吗?也许类似于C#的using
陈述。
答案 0 :(得分:6)
相当于C#的using
是try-with-resources。不要使用它,它将关闭System.in
,你不希望这样。忽略此特定情况的警告。让垃圾收集器声明Scanner
并按原样保留标准输入。
答案 1 :(得分:0)
我可以看到以下两个选项...... 选项#1:一旦读取输入,就立即关闭扫描仪。
Scanner sc = new Scanner(System.in);
int userInput = sc.nextInt();
sc.close();
选项#2:使用try-with-resource语句
try(Scanner sc1 = new Scanner(System.in)) {
int userInput1 = sc1.nextInt();
}
选项#2的缺点是它将关闭try-with-resource语句中存在的所有资源,其中包括System.in。
答案 2 :(得分:0)
Java具有自动垃圾回收功能。自动垃圾收集是查看堆内存,识别正在使用哪些对象以及哪些对象未被删除以及删除未使用对象的过程。使用中的对象或引用的对象意味着程序的某些部分仍然维护指向该对象的指针。程序的任何部分都不再引用未使用的对象或未引用的对象。因此可以回收未引用对象使用的内存。
这意味着您不必担心此类警告。此外,在Eclipse
中,您可以使用@SuppressWarning
来消除烦人的警告。