Java常見異常類的繼承關係
一 Java常見的異常類之間的繼承關係
1 從圖中可以看出,Java把所有非正常情況分成兩種:異常(Exception)和錯誤(Error),它們都繼承Throwable父類。
2 Err錯誤,一般是指與虛擬機器相關的問題,如系統崩潰,虛擬機器錯誤,動態連結失敗等,這種錯誤無法恢復或不可能捕獲,將導致應用程式中斷,通常應用程式無法處理這些錯誤,因此應用程式不應該使用catch塊來捕獲Error物件。在定義該方法時,也無須在其throws子句中宣告該方法可能丟擲Error及任何子類。
二 異常捕獲示例1
1 程式碼示例
public class DivTest { public static void main(String[] args) { try { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); int c = a / b; System.out.println("您輸入的兩個數相除的結果是:" + c ); } catch (IndexOutOfBoundsException ie) { System.out.println("陣列越界:執行程式時輸入的引數個數不夠"); } catch (NumberFormatException ne) { System.out.println("數字格式異常:程式只能接受整數引數"); } catch (ArithmeticException ae) { System.out.println("算術異常"); } catch (Exception e) { System.out.println("未知異常"); } } }
2 執行結果
E:\test\Java\Java8\ExceptionTEST\src>java 8 1
錯誤: 找不到或無法載入主類 8
E:\test\Java\Java8\ExceptionTEST\src>java DivTest 8 1
您輸入的兩個數相除的結果是:8
E:\test\Java\Java8\ExceptionTEST\src>java DivTest 8 1 3
您輸入的兩個數相除的結果是:8
E:\test\Java\Java8\ExceptionTEST\src>java DivTest 8
陣列越界:執行程式時輸入的引數個數不夠
E:\test\Java\Java8\ExceptionTEST\src>java DivTest 8 d
數字格式異常:程式只能接受整數引數
E:\test\Java\Java8\ExceptionTEST\src>java DivTest 8 0
算術異常
3 結果分析
上面程式針對3種類型的異常,提供了專門的異常處理邏輯。
三 NullPointerException異常
1 程式碼示例
import java.util.*; public class NullTest { public static void main(String[] args) { Date d = null; try { System.out.println(d.after(new Date())); } catch (NullPointerException ne) { System.out.println("空指標異常"); } catch(Exception e) { System.out.println("未知異常"); } } }
2 執行結果
空指標異常
3 結果分析
上面程式針對NullPointerException異常提供了專門的異常處理塊。上面的程式呼叫一個null物件的after方法,這將引發NullPointerException異常,Java執行時將會呼叫NullPointerException對應的catch塊來處理該異常。
四 異常捕獲順序問題
1 程式碼示例
try
{
System.out.println(d.after(new Date()));
}
catch(Exception e)
{
System.out.println("未知異常");
}
catch (NullPointerException ne)
{
System.out.println("空指標異常");
}
2 結果分析
上面程式碼編譯無法通過,因為將大異常放在了小異常的前面,應該放在後面。
3 小結
異常捕獲時,一定要記住先捕獲小異常,再捕獲大異常。