Scanner類使用close()方法問題
Java通過System類進行標准的輸入輸出操作,當我們使用Scanner類實現鍵盤的數據輸入,由於代碼是順序執行的,前面的一個Scanner實例假如調用了Scanner對象的close()方法,當我們再次生成一個Scanner對象實例進行輸入的時候就會出現錯誤。
import java.util.Scanner;
public class ScannerCloseException {
public void func1(){
Scanner in = new Scanner(System.in);
in.nextLine();
in.close();
}
public void func2(){
Scanner in = new Scanner(System.in);
in.nextLine();
in.close();
}
public static void main(String[] args) {
ScannerCloseException sce = new ScannerCloseException();
sce.func1();
sce.func2();
}
}
出現異常
第一次輸入
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at problem.ScannerCloseException.func2(ScannerCloseException.java:14)
at problem.ScannerCloseException.main(ScannerCloseException.java:20)
為什么呢,在func1中in調用了close()方法關閉輸入流,兩個方法中的in(這是兩個不同的實例)使用的是同一個輸入流,func1中關閉后,使用func2再次進行輸入的時候,System.in已經關閉了,就不能檢測輸入了。
一般在main函數所在的類創建一個Scanner對象實例,在代碼的最后再關閉。