除了系統中自己帶的異常,我們也可以自己寫一些簡單的異常類來幫助我們處理問題。
所有的異常命名都是以Exception
結尾,并且都是Exception
的子類。
假設我們要編寫一個人類的類,為了判斷年齡的輸入是否合法,我們編寫了一個名為IllegalAgeException
的異常類:
package 實驗五;public class IllegalAgeException extends Exception
{private static final long serialVersionUID = 1L; public IllegalAgeException() {}public IllegalAgeException(String message){super(message);}
}
這里如果我們要傳遞自己的信息就要有一個有參構造函數,里面調用父類的有參構造函數并將消息傳入。(然后就可以調用異常類的方法將消息輸出)
然后我們為了可以多次使用再創建一個專門檢查年齡是否合法的類,里面沒有什么成員,就只有一個靜態方法用來檢查并拋出異常。
package 實驗五;public class CheckAge
{public static void check(int age) throws IllegalAgeException{if(age<=0){throw new IllegalAgeException("人類年齡應該是一個非負整數!");}else if(age>=150){throw new IllegalAgeException("目前不存在年齡這么大 的人類!");}}
}
然后我們在創建人類的時候就可以調用這個類檢查輸入的年齡是否有誤了:
package 實驗五;import java.util.*;public class Person
{private int age;private String sex;private String name;Person(){int _age;Scanner sc=new Scanner(System.in);System.out.print("姓名:"); name=sc.next();System.out.print("性別:"); sex=sc.next();System.out.print("年齡:"); _age=sc.nextInt();try{CheckAge.check(_age);}catch(IllegalAgeException e){e.printStackTrace();}age=_age;}Person(String _name,String _sex,int _age){name=new String(_name); sex=new String(_sex);try{CheckAge.check(_age);}catch(IllegalAgeException e){e.printStackTrace();}age=_age;}String getName(){return name;}String getSex() {return sex;}int getAge(){return age;}void setName(String _name){name=new String(_name);}void setSex(String _sex){sex=new String(_sex);}void setAge(int _age){try{CheckAge.check(_age);}catch(IllegalAgeException e){e.printStackTrace();}age=_age;}
}
可以在主程序中運行一下檢測:
package 實驗五;import java.util.*;public class A
{public static void main(String[] args) {Person a=new Person();}}
運行結果: