![](/img/trans.png)
[英]Connecting a Scanner object to a System.in object and using Scanner methods
[英]System.in and Scanner object
我在了解System.In的特定工作時遇到了一個問題,我所了解的是這是System類中的一個數據字段,並且它的聲明是
public static final InputStream in
它被聲明為final,因此無法更改,正如Oracle資料中提到的那樣,他們說“ in”是“標准”輸入流。 該流已經打開,可以提供輸入數據了。 通常,此流對應於鍵盤輸入或主機環境或用戶指定的另一個輸入源。
這到底是什么意思? 。
當我編寫以下代碼時:
Scanner input = new Scanner(System.in);
該Scanner對象已准備好掃描System.in中的內容,但是CMD上沒有任何顯示
另一點是,當我嘗試打印System.in時,最終輸出如下
java.io.BufferedInputStream@15db9742
誰能解釋一下整個過程以及System.in和Scanner類的確切工作!
System.in
是BufferedInputStream
,這樣的Stream
可以是任何輸入流(例如,網絡套接字或文件),也可以是標准輸入通道stdin
。
stdin
是您在命令行中鍵入的內容,因此很明顯,它不顯示任何內容。
當您按照問題所示創建Scanner
,您會將標准輸入通道送入該Scanner
,但是直到被要求Scanner
,掃描儀才做任何事情。 掃描器是包裝器 :一種構造(使解析stdin
輸入更加容易(更方便))。 從某種意義上說,它沒有提供其他功能,您可以自己完成掃描程序的全部工作,但是如果您要從stdin
解析整數,使用掃描程序會更容易。
因此,當您輸入實例時:
Scanner sc = new Scanner(System.in);
int val = sc.nextInt();
System.out.println(2*val);
它將等到您輸入一行,將其解析為整數,然后在標准輸出通道( stdout
)上打印輸入值的兩倍。
一些結論性注釋:
System.in
不是final
,可以使用System.setIn
將另一個輸入流設置為標准輸入字符串。 例如文件或網絡套接字。 如果您將程序調用為java -jar program.jar < inputfile
,則默認的System.in
也可以從文件或管道中獲取輸入。
Scanner
是java.util
包中的類。
當您編寫Scanner sc=new Scanner(System.in)
您試圖從"standard" input stream
讀取"standard" input stream
。 主要是System.in
用於從控制台讀取輸入
掃描程序會保持程序執行,直到輸入到達為止,這就是本來的意思。
您的問題是,在打印System.in
時最終會得到類似java.io.BufferedInputStream@15db9742
的輸出,該輸出稱為對象hash code
,如果嘗試執行以下操作,則很可能會得到這種輸出打印對象。 在這里,您將獲得哈希碼,因為您正在嘗試打印整個流。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.