2010-02-06 44 views
1

我是一個Java新手,堅持了這一點:Java中的這種語法是什麼意思?

BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in)); 

InputStreamReader ISR = new InputStreamReader(System.in);  
BufferedReader BR = new BufferedReader(ISR); 
  • 它們之間有什麼區別?

  • 另外,當我從用戶獲取輸入時,是否強制拋出IOException?

謝謝。

回答

7

唯一的區別是第二個窗體顯式地將對InputStreamReader的引用保存爲一個變量,根據後來對它做些什麼,該變量可能有用也可能沒有用。

3

沒有區別,只是一個偏好問題。

這些方法會拋出檢查異常,所以如果可以的話,你必須處理它們或者向調用方法拋出。

+0

同意。唯一的區別是通過ISR再次引用InputStreamReader。使用第一個可能會很好,所以他以後不會意外使用ISR,並且可能會擰緊BRs狀態。 – 2010-02-06 15:24:01

+0

同意,但希望它是在當地的方法範圍內完成的,所以暫時不會很長時間。 – duffymo 2010-02-06 15:28:46

3

區別在於第二個更詳細,並且使用InputStreamReader的臨時變量。通過用代替new InputStreamReader(System.in)獲得第一個版本。

但兩者都做同樣的事情。後面的優點是,你仍然可以通過變量ISR(如果你有/想)在代碼的後面訪問InputStreamReader

0

除了第一個不允許您在沒有仔細檢查異常的情況下區分兩個對象實例化的異常之外,兩者之間沒有真正的區別。

0
  1. 其實第二個變種允許你直接使用ISR,在這種情況下它可能會導致一些問題。 但是,如果關閉BR失敗,第二個變體還允許您關閉ISR。
  2. 不,這不是強制性的。向他展示人類可讀的消息更好。
0

它們會產生相同的結果。基於BR和br1中的System.in的BufferedReader。

如果您以後因爲其他原因需要ISR,那麼您將首先使用該版本。只是一個優先事項,速記與詳細。

2

- 答到第一個問題 是絕對不同的是,你將要創建的InputStreamReader參考沒什麼區別也再次就可以避免....我個人傾向於避免它

- 答到第二問題

I/O異常是檢查異常i。Ë例外是在編譯期進行檢查,同時我們有unchecked異常也是在Java中,其在運行時

檢查更多的檢查,檢查異常,你可以參考here

0

好, 問題得到全面回答。但是,我想強調使用第一種語法,因爲您可以避免分配額外的引用。而且,分配額外的參考資料有可能使垃圾收集器拖延工作。這並不一定意味着它不會垃圾收集,但它仍然會造成一些小的開銷。

因此,答案會嘗試在任何時候都使用第一種語法,不同之處在於您需要稍後使用ISR變量進行一些操作。

0

沒有區別,只是第一種形式更緊湊和高效,如果你可以說,因爲沒有額外的參考InputStreamReader創建。