java基礎——異常(三)
阿新 • • 發佈:2018-12-11
前兩次博文介紹了異常的基本概況以及處理異常的方式,這一篇博文介紹自定義異常。 一,自定義異常的定義 通過閱讀異常原始碼:發現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());
}
}