2015-01-11 127 views
-2

我想了解在Java中檢查異常,並有以下查詢。Java檢查異常

是下列正確的:如果一個方法拋出的任何類型的檢查異常,潛在的那個例外必須是

  1. 使用throws關鍵字聲明,或
  2. 由各自抓方法。

如果上述內容是正確的,這是否意味着我需要了解每一個內置到Java的檢查異常,以便我知道我的方法是否有可能拋出異常?還是應該嘗試編譯我的代碼,然後根據編譯時錯誤修改我的代碼?

回答

0

如果上述內容是正確的,這是否意味着我需要了解內置於Java [...]的每個檢查過的異常?

是的,您的陳述是正確的,但沒有人希望您在編程時瞭解所有可能的檢查異常。如果你有一個編譯器或者更好的IDE,那麼你就不必如此。

要麼你去來回編譯器輸出和代碼之間,你在你的問題建議,或者如果你違反了規則,你安裝一個IDE,比如Eclipse,讓你直接通知:

enter image description here

0

,這是否意味着我需要了解是建立在對Java

我假設你使用的是一些IDE(Eclipse的如)每一個檢查異常 - 如果沒有,你應該得到Ø儘快。然後,IDE幾乎不斷地編譯代碼,所以當出現問題時,你會在它附近得到一個紅色的下劃線,並提示一個工具提示泡泡,告訴你什麼是錯誤的 - 例如「丟失拋出」。

因此,你的第二個假設是基本正確的,它只是發生在幕後:

或者我應該只是嘗試基於編譯時錯誤編譯我的代碼,然後修改我的代碼?

所以不,你不需要瞭解所有的例外。

此外,所有選中的例外延伸到Exception,所以如果您有權訪問源代碼,則可以檢查它們的基礎。未檢查的例外延伸至RuntimeException

經驗法則:如果是I/O,它通常會被檢查。這是您遇到的最常見的異常類型。

0

whenever you use a method (whether your own or In-built) if you closely follow its method signature, if the method throws some exception you need to throw/handle it explicitly in your code

這樣你就不需要記住所有的異常,你就會知道處理哪些例外情況。

爲了讓生活方便使用的一些IDE像Eclipse

希望這有助於!

祝你好運!

0

如果上面是正確的

這是...

[...]這是否意味着我需要了解的是內置在每一個檢查異常Java,以便我知道我的方法是否有可能產生該異常?還是應該嘗試編譯我的代碼,然後根據編譯時錯誤修改我的代碼?

使用IDE!你不需要親密地知道所有這些。

做什麼想檢查,但是是層次結構(即,檢查javadoc!這應該是一個巴甫洛夫反射);因爲異常是類,所以它們相互繼承,例如,FileSystemException是java.nio.file的portmanteau例外,用於指示與文件系統相關的問題,並繼承IOException。如果你想特別對待它,趕在IOException之前。

作爲一般規則,首先捕獲更具體的例外

另外,別抓Exception。決不。問題是,RuntimeException,這是未檢查的基本例外例外,繼承Exception,這意味着如果您捕獲Exception您捕獲所有未經檢查的異常。你想重新拋出未檢查:

try { 
    something(); 
} catch (RuntimeException unchecked) { 
    throw unchecked; 
} catch (Exception e) { 
    // deal with e 
} 
0

是你需要知道每exception..however如果你知道超類異常的比你的U並不需要知道它的子類...用於如.FileReader拋出一個名爲FileNotFoundException的異常由於FileNotFoundException是IOException的一個子類,因此我們可以在拋出列表中指定IOException並使上述程序無編譯器錯誤。