1. 程式人生 > >Java常見異常類的繼承關係

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 小結

異常捕獲時,一定要記住先捕獲小異常,再捕獲大異常。

  • 9c234fae-d8be-3479-8275-ffceee4c7b84-thumb.jpg
  • 大小: 57.8 KB