1. 程式人生 > >Java常見的異常處理(Exception)

Java常見的異常處理(Exception)

一、異常的定義 Java程式碼在執行時期發生的問題就是異常;常見的異常有:陣列角標越界異常(ArrayIndexOfBoundsException)、空指標異常(NullPointerException)。

public static void main(String[] args) {
	int[] arr = new int[3];
	System.out.println(arr[0]);
	System.out.println(arr[3]);
// 該句執行時發生了陣列索引越界異常ArrayIndexOutOfBoundsException,
					}

二、異常的結構 異常的繼承結構:Throwable類是所有異常的根基,Error和Exception繼承Throwable。異常主要分為三種類型:系統錯誤(Error)、異常(Exception)、執行時異常(RuntimeException)。 1、系統錯誤(Error):Error類描述的是內部系統的錯誤,由Java虛擬機器丟擲,只能通過修改原始碼。 2、異常(Exception):Exception類是由程式和外部環境所引起的錯誤,這些錯誤能被程式處理和捕獲。如:ClassNotFoundException(試圖使用一個不存在的類)、IoException(無效的輸入、讀檔案時超過檔案尾、開啟一個不存在的檔案)。 3、執行時異常(RuntimeException):通常是程式設計錯誤:錯誤的型別轉換、訪問一個越界陣列或數值錯誤。

public class Test{
	public static void main(String[] args){
	System.out.printIn(1/0);
	// 該句執行時發生了執行時異常RuntimeException,
	}
}

三、異常的處理 1、宣告異常(throws Exception):定義在方法的宣告上,後面可以同時跟多個數據型別的異常。 **注:**如果方法沒有在父類中宣告異常,就不能在子類對其進行繼承來宣告異常。 2、丟擲異常(throw Exception):定義在方法中,後面跟的是異常型別,且只能丟擲一個異常。 3、捕獲異常(try…catch…):分為單異常捕獲、多異常捕獲。

//1、單異常捕捉
try{
	//需要檢測的語句,其可能產生錯誤程式碼
}
catch(異常類 變數){
	//產生異常,處理異常
}finally{
	//一定會執行的語句(有些異常會發生程式碼的跳轉,導致finally語句不執行,就直接退出)
}	


//2、多異常捕捉
try{
	//需要檢測的語句,其可能產生錯誤程式碼
}
catch(異常類1 變數1){
	//產生異常,處理異常
}
catch(異常類2 變數2){
	//產生異常,處理異常
}finally{
	//一定會執行的語句(有些異常會發生程式碼的跳轉,導致finally語句不執行,就直接退出)
}		
	注:異常類2要是異常類1的子類或者宣告父類,簡而言之:異常類1的範圍要比異常類2的範圍要廣。
	 

4、方法重寫時的異常處理

A:方法重寫時候異常的處理
	*1:子類覆蓋父類方法時,如果父類的方法宣告異常,子類只能宣告父類異常或者該異常的子類,或者不宣告。
		例如:
		class Husband{
			public void method () throws RuntimeException {
			}
		}
		class Son extends Husband {
			public void method() throws RuntimeException { }  //丟擲父類一樣的異常
			//public void method() throws NullPointerException{ } //丟擲父類子異常
		}
	* 2:當父類方法宣告多個異常時,子類覆蓋時只能宣告多個異常的子集。
		例如:
		class Husband {
			public void method () throws NullPointerException, ClassCastException{
			}
		}
		class Son extends Husband {
			public void method()throws NullPointerException, ClassCastException { }  		
			public void method() throws NullPointerException{ } //丟擲父類異常中的一部分
			public void method() throws ClassCastException { } //丟擲父類異常中的一部分
		}
	*3:當父類被覆蓋的方法沒有異常宣告時,其繼承的子類覆蓋時無法宣告異常的。
		例如:
		class Husband {
			public void method (){
			}
		}
		class Son extends Husband {
			public void method() throws Exception { }//錯誤的方式
		}

5、從異常中獲取資訊

  • 1、getMessage()方法 返回該異常的簡單資訊 2、toString()方法 返回該異常的名稱與詳細資訊字串 3、printStackTrace()方法 在控制檯輸出該異常的名稱與詳細資訊字串、異常出現的程式碼位置(eclipse預設採用該方法獲取異常資訊)