iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
自我挑戰組

Java SE系列 第 25

Day25:看看豬走路

在初學Java的時候,常常會有以下的輸入輸出範例出現:

Scanner sc = new Scanner(System.in);
System.out.print("Please input some text : ");
String inputStr = sc.next();
System.out.println("Here's your input text : " + inputStr);

我們執行以上程式時,就會在console看到”Please input some text : “的字樣,並可以輸入文字在console上,假設我們輸入了"123";當我們按下enter後,就會在下一行看見”Here’s your input text : 123“。

不知道大家當初看到這段程式碼會有什麼感覺,但我個人是覺得很感動!終於寫了一些可以互動的程式了,不然在此之前會覺得程式怎麼只是一個小算盤一樣做一些四則運算。

不過通常這段程式碼的用意會是在說明String或者加入一些while語法來解釋迴圈的概念,不會把重點放在能夠讓我們輸入文字的System.in以及能夠輸出文字到console的System.out,這篇就希望來回頭看看這兩個是甚麼東西。

若我們去翻Java API時,會發現其實in與out是System這個類別的靜態資料成員(field);System.in為InputStream型態,System.out為PrintStream型態。

那為什麼我們要用System.in以及System.out呢?若仔細想一下上面的程式碼,輸入部分其實真正在運作的是Scanner實例,呼叫了next()來讓程式去等待我們輸入資料,那我們是不是也可以在new Scanner(InputStream someIS)時放入其他的InputStream實例?答案當然是沒有問題,我們可以放入任意的InputStream型別物件進去來當作Scanner的建構式引數,可是就要自己寫了,對不對?比如我們希望放某個檔案當作引數,那就要寫出new FileInputStream(String filePath),是不是就麻煩了~必須真的要有這個檔案,然後知道這個檔案放在什麼路徑下,並且親自創建出FileInputStream的實例。

所以其實可以說,Java所提供的System.in以及System.out就是一個幫我們創建好的輸入輸出實例,也稱為"標準輸入"以及"標準輸出",且預設會是在文字模式的console下運作;如果我們需要改變System.in或System.out為其他的輸入輸出模式,比如把來源或目的地改成檔案,那就可以再運用System的靜態方法setIn(InputStream in)以及setOut(PrintStream out)來覆蓋掉預設的設定。

小結:
System.in以及System.out是Java幫我們創建好,能夠直接拿來用的輸入輸出實例,預設是在文字模式的console中運行。


上一篇
Day24:老闆我等等來拿
下一篇
Day26:救世主
系列文
Java SE30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言