如何只使用一次扫描仪然后摆脱它?

时间:2014-10-18 01:11:49

标签: java java.util.scanner resource-leak

我有一个java程序,我必须得到用户输入,但是,我只需要输入一次用户输入,之后我就不再需要扫描仪了。执行以下操作:

int userInput = new Scanner(System.in).nextInt();

给我一​​个资源泄漏警告,说<unassigned closeable value> is never closed

还有另外一种方法我只能使用一次扫描仪,然后摆脱它,所以没有资源泄漏吗?也许类似于C#的using陈述。

3 个答案:

答案 0 :(得分:6)

相当于C#的usingtry-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来消除烦人的警告。