1. 程式人生 > 其它 >Java中的異常觸發都是通過throw主動丟擲

Java中的異常觸發都是通過throw主動丟擲

技術標籤:Java

問:自定義執行時異常,怎麼樣才能像API中那些執行時異常那樣,自動丟擲,我寫自定義執行時異常時,總是要自己主動throw,才會丟擲。

例如:執行下面程式碼時,控制會自動顯示異常資訊

答:API中那些異常也是API的作者自己主動丟擲,跟自己寫的自定義異常一樣。如果別人用你寫的程式碼當API呼叫,他也會覺得你定義的異常是自動丟擲的。Java中的任何異常都是throw主動丟擲的。

實現執行時異常丟擲步驟

1、自己定義一個異常類

2、當你想要在控制檯顯示對應異常資訊時,就throw new 異常類();

public class Demo {
    public static void main(String[] args) {
        //執行時,當呼叫這個方法,程式會進入對應的else if裡面,就會建立一個異常類物件,並丟擲,
        //JVM收到這個物件,就會在操作檯顯示異常資訊                           
        judgeAgeRuntime(-1);

        //輸入這行程式碼就會出錯,因為該方法在宣告就丟擲編譯時異常,
        // 表示該方法可能有異常,當我在方法裡不想自己處理,讓呼叫該方法的人去處理,
        // 所以必須有人用try-catch手動接收並處理異常,否則編譯不會通過
        judgeAge(10);

    }

    public static void judgeAgeRuntime(int age){
        //判斷傳入的年齡是否合法
        if (age >  150){
            //不合法的年齡
            throw  new IllegalAgeRuntimeException("你活不了那麼大歲數,你就是普通人");
        }
        else if (age < 0 ){
            //不合法的年齡,用了異常類的有參構造方法
            throw new IllegalAgeRuntimeException("你的年齡不可能是負數");
        }
    }
    public static void judgeAge(int age) throws IllegalAgeException {
        //判斷傳入的年齡是否合法
        if (age >  150){
            //不合法的年齡
            throw  new IllegalAgeException("你活不了那麼大歲數,你就是普通人");
        }
        else if (age < 0 ){
            //不合法的年齡
            throw new IllegalAgeException("你的年齡不可能是負數");
        }
    }
}
//自定義的年齡不合法執行時異常類
//一定要繼承RuntimeException
class IllegalAgeRuntimeException extends RuntimeException{
//裡面的內容就模仿JDK自帶的異常類內容就行了,不清楚原理
    public IllegalAgeRuntimeException() {
        super();
    }
 //每個異常類的構造方法都可以顯式傳入一個字串,表示異常資訊(原因)的說明
    public IllegalAgeRuntimeException(String message) {
        super(message);
    }
}

//自定義的年齡不合法編譯時異常類
//一定要繼承RException
class IllegalAgeException extends Exception{
    public IllegalAgeException() {
        super();
    }
    public IllegalAgeException(String message) {
        super(message);
    }
}