Java 中的不可達 catch 塊是什麼?


在任何情況下都**無法到達**的語句塊被稱為**不可達塊**。Java 不支援不可達塊。使用**Exception 類**引用的 catch 塊應該並且必須始終是最後一個 catch 塊,因為**Exception** 是所有異常的**超類**。當我們保留多個 catch 塊時,**catch 塊的順序必須從最具體到最通用**。即 Exception 的子類必須放在前面,超類放在後面。如果我們先保留超類,然後保留子類,編譯器將**丟擲不可達 catch 塊錯誤**。

語法

try {
   // statements
} catch(Exception e) {
   System.out.println(e);
} catch(NumberFormatException nfe) { //unreachable block. Not supported by Java, leads to an error.
   System.out.println(nfe);
}

如果以下兩個條件都為真,則編譯器認為 catch 子句是可達的

  • 在 try 塊中丟擲的已檢查異常可以分配給 C 的引數。
  • 沒有前一個 catch 子句的引數型別等於或為 C 的引數型別的超型別。

編譯器認為可達的 catch 子句如果以下兩個條件都為真,則可能變得不可達

  • catch 子句引數型別 E 不包含任何未檢查異常。
  • 在 try 塊中丟擲的型別為 E 的(嚴格)子型別的所有異常都已由前面的 catch 子句處理。

示例

線上演示

public class UnreachableBlock{
   public static void main(String[] args) {
      try {
         int i = Integer.parseInt("abc"); //This statement throws NumberFormatException
      } catch(NumberFormatException nfe) {
         System.out.println("This block handles NumberFormatException");
      } catch(Exception e) {
         System.out.println("This block handles all exception types");
      } catch (Throwable t) {
         System.out.println("Throwable is super class of Exception");
      }
   }
}

輸出

This block handles NumberFormatException

更新於: 2020 年 2 月 6 日

5K+ 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告