我有一個程序在java中,我必須得到用戶輸入,但是,我只需要獲得用戶輸入一次,之後,我不再需要掃描儀。執行以下操作:如何僅使用掃描儀一次然後擺脫它?
int userInput = new Scanner(System.in).nextInt();
給了我一個資源泄漏的警告,稱<unassigned closeable value> is never closed
。
是否有另一種方式我可以只使用掃描儀一次,然後擺脫它,所以沒有資源泄漏?也許類似於C#的using
聲明。
我有一個程序在java中,我必須得到用戶輸入,但是,我只需要獲得用戶輸入一次,之後,我不再需要掃描儀。執行以下操作:如何僅使用掃描儀一次然後擺脫它?
int userInput = new Scanner(System.in).nextInt();
給了我一個資源泄漏的警告,稱<unassigned closeable value> is never closed
。
是否有另一種方式我可以只使用掃描儀一次,然後擺脫它,所以沒有資源泄漏?也許類似於C#的using
聲明。
相當於C#的using
是try-with-resources。不要使用它,它會關閉System.in
,你不想那樣做。忽略這個特殊情況的警告。讓垃圾收集器聲稱Scanner
並保持原樣輸入標準輸入。
我可以看到以下兩個選項: 選項#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。
Java自動垃圾收集。自動垃圾收集是查看堆內存的過程,可以識別哪些對象正在使用,哪些不是,以及刪除未使用的對象。一個正在使用的對象或一個被引用的對象,意味着你的程序的某個部分仍然保持着一個指向該對象的指針。未使用的對象或未引用的對象不再被程序的任何部分引用。所以未被引用的對象所使用的內存可以被回收。
這意味着你不必擔心這種類型的警告。此外,在Eclipse
中,您可以使用@SuppressWarning
來消除惱人的警告。