1. 程式人生 > >java基礎——異常(三)

java基礎——異常(三)

前兩次博文介紹了異常的基本概況以及處理異常的方式,這一篇博文介紹自定義異常。 一,自定義異常的定義 通過閱讀異常原始碼:發現java中所有的異常類,都是繼承Throwable,或者繼承Throwable的子類。這樣該異常才可以被throw丟擲。 說明這個異常體系具備一個特有的特性:可拋性:即可以被throw關鍵字操作。 並且查閱異常子類原始碼,發現每個異常中都呼叫了父類的構造方法,把異常描述資訊傳遞給了父類,讓父類幫我們進行異常資訊的封裝。 例如NullPointerException異常類原始碼:

public class NullPointerException extends RuntimeException {
    public NullPointerException() {
        super();//呼叫父類構造方法
    }
    public NullPointerException(String s) {
        super(s);//呼叫父類具有異常資訊的構造方法
    }
}

照葫蘆畫瓢,我們可以自己定義一個類似的異常,語法如下:

Class 異常名 extends Exception{ //或繼承RuntimeException
	public 異常名(){
}
	public 異常名(String s){ 
super(s); 
}
}

二,自定義異常的一個例子 定義Person類,包含age成員變數。 在Person類的有引數構造方法中,進行年齡範圍的判斷,若年齡為負數,則丟擲AgeException異常,異常提示資訊“年齡不能為負值”。 自定義異常類

/*
 * 如果自定義異常繼承 RuntimeException 說明該異常為執行時異常
 * 如果自定義異常繼承Exception 說明該異常是編譯時異常
 */
public class AgeException extends RuntimeException{
	public AgeException(){
		
	}
	public AgeException(String str){
 		super(str);//交給父類處理,最終給的給Throwable
	}

}

Person類

public class Person {
	private int age;

	public Person(int age) {
		super();
		if(age<0){
		  //丟擲一個自定義異常物件
		//使用自定義異常為了見名知義:例如看到我們自定義異常AgeException
	    //就知道問題的產生跟年齡有關
		  throw new AgeException("年齡不能為負值");
		}
		this.age = age;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		if(age<0){
			  //丟擲一個自定義異常物件
			  throw new AgeException();
		}
		this.age = age;
	}

}

測試類
public class Demo13 {
	public static void main(String[] args) {
      Person p=new Person(-1);
      p.setAge(-3);
      System.out.println(p.getAge());
	}
}