[英]Java checked exceptions
我試圖了解 Java 中的已檢查異常並有以下查詢。
以下是否正確:如果一個方法有可能拋出任何類型的已檢查異常,則該異常必須是
throws
關鍵字聲明,或如果以上是正確的,這是否意味着我需要了解 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.