簡體   English   中英

Java 檢查異常

[英]Java checked exceptions

我試圖了解 Java 中的已檢查異常並有以下查詢。

以下是否正確:如果一個方法有可能拋出任何類型的已檢查異常,則該異常必須是

  1. 使用throws關鍵字聲明,或
  2. 通過相應的方法捕獲。

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

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

是的,您的陳述是正確的,但是沒有人希望您在編程時了解所有潛在的已檢查異常。 如果您手頭有編譯器,或者更好的 IDE,則不必這樣做。

您要么按照問題中的建議在編譯器輸出和代碼之間來回切換,要么安裝 Eclipse 等 IDE,如果您違反規則,它會直接通知您:

在此處輸入圖片說明

這是否意味着我需要了解 Java 內置的每個已檢查異常

我假設您正在使用某些 IDE(例如 Eclipse) - 如果沒有,您應該盡快獲得一個。

然后,IDE 幾乎會持續編譯代碼,因此當出現問題時,您會在它附近看到一個紅色下划線,以及一個工具提示氣泡,告訴您哪里出了問題 - 例如“缺少投擲”。

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

或者我應該嘗試編譯我的代碼,然后根據編譯時錯誤修改我的代碼?

所以不,你不需要學習所有的例外。

此外,所有已檢查的 Exception 都擴展Exception ,因此如果您有權訪問源,則可以檢查它們基於什么。 非檢查異常擴展了RuntimeException

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

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

希望這可以幫助!

祝你好運!

如果以上正確

這是...

[...] 這是否意味着我需要了解 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
}

是的,您需要知道每個異常……但是,如果您知道該異常的超類,那么您不需要知道它的子類……例如,FileReader 拋出一個名為 FileNotFoundException 的異常,因為 FileNotFoundException 是 IOException 的子類,我們可以只在 throws 列表中指定 IOException 並使上述程序編譯器無錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM