2015-10-24 124 views
0

我試圖提高我對IO的理解。據我瞭解,'in'是System類的成員變量。system.in包含什麼內容?

我相信這是參考變量由於其類型是如在http://docs.oracle.com/javase/7/docs/api/java/lang/System.html

提到「的InputStream」然而,「的InputStream」是一個抽象類,因此它不能被實例化。

我已經做了一些測試並得出結論,儘管您不能實例化抽象類,但可以創建抽象類類型的引用變量。所以我的第一個問題是這個目的,如果沒有,爲什麼它被允許?

Example: 

abstract class Someclass { 
; 
} 

Someclass variable; // A field member of some another class. What purpose could it serve? 

因此,這裏是我的第二批相關問題。 system.in變量包含(或引用)是什麼?它肯定不是

InputStream in = new InputStream();

因爲它是一個抽象類。這是否意味着它有一個子類的實例?如果是這樣,哪一個?有沒有辦法在線查看現場常用變量和方法的「主體」?

感謝您的幫助。

編輯:重複的建議無法解決問題。我唯一能理解的是InputStream可能是用BufferedStream類實例化的。

下面的問題仍然站立:

1)是否有辦法在網上觀看現場流行的變量和方法的「體」? 2)爲什麼允許抽象類的引用以及它的目的是什麼?

3)和新的問題,即上漲的建議序列 - 這是爲什麼呢InputStream in = new BufferedStream()代替BufferedStream in = new BufferedStream()

+0

'System.in'引用InputStream'的實現,它通常從鍵盤輸入外部世界的輸入,但輸入可以通過其他方式輸入(通常稱爲stdin) – MadProgrammer

+0

[什麼是抽象類的目的是什麼?](http://stackoverflow.com/questions/2288467/what-is-the-purpose-of-abstract-classes) – Andreas

+0

[System.in屬於哪個輸入類,以及爲什麼?](http://stackoverflow.com/questions/32051872/what-input-class-does-system-in-belongs-to-and-why) – ApproachingDarknessFish

回答

0

System.in是通常連接到控制檯程序的鍵盤輸入的InputStream。由於數據通常通過命令行參數或配置文件傳遞給命令行Java應用程序,因此System.in並不經常使用。在使用GUI的應用程序中,應用程序的輸入通過GUI提供。這是一個獨立於Java IO的輸入機制。系統本身是java.lang包中的公共final類,它包含多種輸入,輸出和錯誤輸出方法。

+0

謝謝,但我的問題不是它做什麼,它的作用或受歡迎程度,而是如何實現+關於EDIT下參考變量的一些額外問題 – Sam

1

對於這個問題

3),而且上漲的建議序列中的新問題 - 爲什麼是它的InputStream在=新BufferedStream(),而不是 BufferedStream在=新BufferedStream()

閱讀有關依賴注入的內容。

對於

2)爲什麼允許做抽象類的引用,什麼是它的目的是什麼?

我只能從我的知識,說的是:通過定義,我們不能創建抽象類的實例,但我們可以利用現有的。因爲它可能仍然有數據成員和數據變量。由於這些數據成員可能不是靜態的,我們需要一個名稱引用來訪問它。

你的問題1不清楚。但如果想從.class文件中查看源代碼,請閱讀有關反編譯器的信息。 Java隨附它。