java自定義異常
/**
* 自定義異常
*/
public class Test05 {
}
class IllegalAgeException extends Exception{
? ?//非法年齡異常類 繼承異常類
? ?public IllegalAgeException(){}
? ?//無參構(gòu)造器
? ?public IllegalAgeException(String message){
? ? ? ?//message中放異常的信息/描述
? ? ? ?super(message);
? ? ? ?//調(diào)用父類的有參構(gòu)造器 構(gòu)造器不能繼承 不寫時(shí)默認(rèn)第一行super()調(diào)用無參構(gòu)造器
? ?}
}
class IllegalNameException extends Exception{
? ?public IllegalNameException(){}
? ?public IllegalNameException(String message){
? ? ? ?super(message);
? ?}
}
class Adult{
? ?String name;
? ?int age;
? ?public void setAge(int age){
? ? ? ?if (age<19){
? ? ? ? ? ?try {
? ? ? ? ? ? ? ?throw new IllegalAgeException("年齡需滿18周歲");
? ? ? ? ? ? ? ?//對數(shù)值進(jìn)行限制 當(dāng)這里拋出新的異常對象時(shí) checked exception提示將這個異常進(jìn)行try/catch處理或者Add exception to method signature 向方法簽名添加異常
? ? ? ? ? ?} catch (IllegalAgeException e) {
? ? ? ? ? ? ? ?//try嘗試拋出 new IllegalAgeException ?catch這個new的exception用IllegalAgeException引用變量e指向 ?并且執(zhí)行{拋出new運(yùn)行時(shí)異常}
? ? ? ? ? ? ? ?throw new RuntimeException(e);
? ? ? ? ? ?}
? ? ? ?}
? ? ? ?this.age = age;
? ?}
? ?public void setName(String str) throws IllegalNameException{
? ? ? ?//對方法內(nèi)的new異常 通過throws拋出
? ? ? ?if (str==""){
? ? ? ? ? ?throw new IllegalNameException("需要輸入有效字符");
? ? ? ?}
? ? ? ?name = str;
? ?}
? ?public static void main(String[] args) {
? ? ? ?Adult a = new Adult();
? ? ? ?a.setAge(-1);
? ? ? ?/*
? ? ? ?Exception in thread "main" java.lang.RuntimeException: IllegalAgeException: 年齡需滿18周歲
? ? ? ? ? at Adult.setAge(Test05.java:27)
? ? ? ? ? at Adult.main(Test05.java:35)
? ? ? ?Caused by: IllegalAgeException: 年齡需滿18周歲
? ? ? ? ? at Adult.setAge(Test05.java:24)
? ? ? ? ? ... 1 more
? ? ? ?Process finished with exit code 1
? ? ? ?程序通過了編譯 但在運(yùn)行(Test05.java:35行)時(shí)throw異常 屬于運(yùn)行時(shí)異常 : 冒號后是異常的信息 在setAge()方法內(nèi)拋出的IllegalAge異常已被catch處理 但(Test05.java:27行)new Runtime異常叫停了進(jìn)程
? ? ? ?throw new RuntimeException(e); 將IllegalAge異常對象e傳參進(jìn) RuntimeException()構(gòu)造方法中
? ? ? ?new Runtime異常的原因Caused by IllegalAge異常: 異常的信息
? ? ? ?在(Test05.java:24行) throw new IllegalAgeException("年齡需滿18周歲");
? ? ? ? */
? ? ? ?try {
? ? ? ? ? ?a.setName("");
? ? ? ? ? ?//checked exception提示處理非法命名異常
? ? ? ?} catch (IllegalNameException e) {
? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ?//打印棧跟蹤信息
? ? ? ? ? ?System.exit(-1);
? ? ? ? ? ?//系統(tǒng)退出返回-1異常退出
? ? ? ?}
? ? ? ?/*
? ? ? ?IllegalNameException: 需要輸入有效字符
? ? ? ? ? at Adult.setName(Test05.java:43)
? ? ? ? ? at Adult.main(Test05.java:66)
? ? ? ?Process finished with exit code -1
? ? ? ?異常類:信息
? ? ? ?(Test05.java:43) throw new IllegalNameException("需要輸入有效字符");
? ? ? ?(Test05.java:66) a.setName("");
? ? ? ?這里的異常退出是手動在catch{}語句塊中添加的 沒有這一項(xiàng)的話進(jìn)程會在catch異常后繼續(xù)往下運(yùn)行至結(jié)束
? ? ? ? */
? ?}
}