[java核心技術]-關於java的輸入和輸出,應該這樣理解

問題前景

學java的都知道輸出語句是

System.out.println("你好");

但是獲取輸入的值爲什麼這麼麻煩呢
我們通常使用的方式如下

Scanner scan = new Scanner(System.in);
String s = scan.nextLine();

如果你在給萌新講課,那麼你不僅要解釋
public static void main(String[] args)這句廢話
還要解釋
Scanner scan = new Scanner(System.in);
着實有點心累。

而且就算入門了,也只是吧經歷放到了其他核心api或者一些其他的技術,根本沒有想過去了解下java的輸入原理(反正我是這樣)

然後我在教同學java的時候,我甚至直接從jshell開始,因爲不想解釋上面兩句廢話
先把基礎語法學會,然後開始解釋public是什麼 static 是什麼

言歸正傳,這裏來看下系統的輸入輸出

控制檯輸出

要想知道爲什麼是System.out.println("你好");
就要先知道System.out是個什麼東西
我們通過源碼追蹤找到
在這裏插入圖片描述
他這裏是一個PrintStream類型一個靜態變量,然後我們繼續追蹤,發現同樣也是Output類型的。
在這裏插入圖片描述

使用PrintWriter

我們都學過java的io操作,我們可以嘗試使用PrintWriter試一下

在這裏插入圖片描述發現結果都一樣,唯一的不同就是我們使用完畢系統輸出後
需要爲了節省資源來關閉流
而我們使用System.out.println("你好");的時候並不需要關閉流

最後總結出:

系統的System.out.println();能幫我們更好的管理流,關閉流和釋放資源都是系統來幫我們完成的

控制檯輸入

那麼問題就來了,那爲什麼系統不把好事做到底,順便把System.in也這樣做
我們可以嘗試一下,看看能直接讀取到什麼

使用字節流讀取字節

下面我們寫一個最原始的獲取控制檯輸入的案例
在這裏插入圖片描述

使用BufferReader

然後我們可以使用BufferReader來給他升升級
在這裏插入圖片描述
結果還是寫了一大老堆代碼
而且,他讀取的內容也十分有限制
在這裏插入圖片描述

瞭解Scanner

Scanner是什麼,他真的只是一個從控制檯輸入的嗎
他的構造方法有很多,但歸根結底一句話,就是處理流中的字符串

Scanner裏面有非常多的能幫助我們轉換數據
在這裏插入圖片描述
所以,推薦使用Scanner的目的就是使用方便,我們能夠按照我們的需求獲取流中的數據(不僅僅是控制檯)

我們可以使用Scanner來讀取一個txt文件

如果我們知道下一行是一個數字還是字符串還是其他類型,我們就可以使用Scanner來讀取

不過這個一般不會使用,這裏只是舉例說明

我們用的更多的是xml、json等比較成熟的文件,所以用不到Scanner

而最適合的當然就是我們用戶手動輸入的,所以,我們知道接下來系統要讀取的數據,我們就按照需求在控制檯輸入,從而達到目的。

總結

Scanner:用來處理流中的文字,來獲取我們想要的值
System.out:系統來幫我們管理、關閉和釋放資源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章