0

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

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

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

有没有另一种方法可以让我只使用一次扫描仪,然后就摆脱它,这样就不会出现资源泄漏?也许类似于 C# 的using声明。

4

3 回答 3

6

与 C# 等效的usingtry-with-resources。不要使用它,它会关闭System.in你不想要的。忽略这种特殊情况的警告。让垃圾收集器声明Scanner并保留标准输入。

于 2014-10-18T01:12:43.213 回答
0

Java有自动垃圾收集。自动垃圾回收是查看堆内存,识别哪些对象正在使用,哪些没有,并删除未使用的对象的过程。使用中的对象或引用的对象意味着程序的某些部分仍然维护指向该对象的指针。程序的任何部分都不再引用未使用的对象或未引用的对象。因此可以回收未引用对象使用的内存。
这意味着您不必担心此类警告。此外,Eclipse您可以使用@SuppressWarning它来消除烦人的警告。

于 2014-10-18T03:35:03.363 回答
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。

于 2014-10-18T02:11:50.353 回答