2014-10-18 18 views
0

我有一个程序在java中,我必须得到用户输入,但是,我只需要获得用户输入一次,之后,我不再需要扫描仪。执行以下操作:如何仅使用扫描仪一次然后摆脱它?

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

给了我一个资源泄漏的警告,称<unassigned closeable value> is never closed

是否有另一种方式我可以只使用扫描仪一次,然后摆脱它,所以没有资源泄漏?也许类似于C#的using声明。

回答

6

相当于C#的usingtry-with-resources。不要使用它,它会关闭System.in,你不想那样做。忽略这个特殊情况的警告。让垃圾收集器声称Scanner并保持原样输入标准输入。

0

我可以看到以下两个选项: 选项#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。

0

Java自动垃圾收集。自动垃圾收集是查看堆内存的过程,可以识别哪些对象正在使用,哪些不是,以及删除未使用的对象。一个正在使用的对象或一个被引用的对象,意味着你的程序的某个部分仍然保持着一个指向该对象的指针。未使用的对象或未引用的对象不再被程序的任何部分引用。所以未被引用的对象所使用的内存可以被回收。
这意味着你不必担心这种类型的警告。此外,在Eclipse中,您可以使用@SuppressWarning来消除恼人的警告。