2014-10-18 16 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來消除惱人的警告。