Scanner類使用close()方法問題


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對象實例,在代碼的最后再關閉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM