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
廣告