java學習筆記(7)——異常

異常

在Java等面向對象的編程語言中,異常自己是一個類
產生異常就是建立異常對象並拋出了一個異常對象。
Java中處理方式爲中斷處理java

異常的產生過程:面試

2、異常的處理

java處理異常的五個關鍵字:try, catch, finally, throw, throws編程

2.1拋出異常throw

做用:編程語言

使用throw關鍵字在指定的方法中拋出指定的異常

使用格式:ui

throw new xxxException("異常產生的緣由");

注意:
1.throw關鍵字必須寫在方法的內部
2.throw關鍵字後邊new的對象必須是Exception或者Exception的子類
3.throw關鍵字拋出指定的異常對象,就必須處理這個異常對象spa

throw關鍵字後邊建立的是RuntimeException或者RuntimeException的子類對象,咱們能夠不處理,默認交給JVM處理
throw關鍵字後邊建立的是編譯異常,咱們就必須處理這個異常,要麼throws,要麼try...catch...

2.2聲明異常throws

做用:
當方法內部拋出異常對象的時候,那麼咱們就必須處理這個異常對象,
可使用throws關鍵字處理異常對象,把鍋拋給JVM處理 --> 中斷處理3d

使用格式:日誌

修飾符 返回值類型 方法名(參數列表) throws AAAException{
    throw new AAAException("產生緣由");
}

注意:code

1.throws必須寫在方法聲明處

2.throws後面聲明的異常必須是Exception或者Exception的子類對象

3.方法內部若是拋出多個異常,throws後面也必須聲明多個異常,
若是拋出的多個異常對象有父子類關係,直接聲明父類

4.調用了一個聲明異常的方法,就必須處理聲明異常,
要麼繼續使用throws聲明拋出,最終交給JVM
要麼try...catch...本身處理異常

2.4捕獲異常try...catch

格式:

try {
    可能產生異常的代碼
}catch(定義異常的變量,用來接收try中拋出的異常對象) {
    異常的處理邏輯,以後是如何處理異常對象
    通常工做中,會把異常的信息記錄到一個日誌中
}
...
catch(異常類名 變量名) {

}

注意:
1.能夠拋出多個異常對象,可使用多個catch
2.try中產生異常,執行catch,以後繼續執行try...catch以後的代碼
若是try中沒有產生異常,就不會進入catch,執行完try直接執行後續代碼

image.png

try...catch與throw的區別:
try...catch能夠執行後續程序
throw則是中斷程序

2.5finally代碼塊

必定要執行的代碼
不管異常發生不發生,都須要執行
並且出現程序跳轉,部分代碼會執行不到

格式:

try{
        ...
    }catch() {
        ...
    }
    ...
    catch() {
    
    }finally {
        //不管是否異常均會執行的代碼
    }

注意:
1.finally必須和try一塊兒使用
2.finally通常用於資源釋放,程序最後均要資源釋放
image.png

3、異常注意事項

1.多個異常分別處理

image.png
還能夠執行後續代碼

2.多個異常,一次捕獲(try),屢次處理(catch)

image.png

catch裏邊定義的異常變量,若是有父子類關係,那麼子類的異常變量必須寫在上邊,不然報錯(與多態知識相關)

image.png
對於try裏面發生的異常,他會根據發生的異常和catch裏面的進行匹配(怎麼匹配,按照catch塊從上往下匹配),
當它匹配某一個catch塊的時候,他就直接進入到這個catch塊裏面去了,後面在再有catch塊的話,它不作任何處理,直接跳過去,所有忽略掉。

3.多個異常一次捕獲一次處理

image.png
catch中定義的變量能夠接收try中的全部異常對象。

運行時異常被拋能夠不捕獲也不處理,給JVM(中斷程序)

四、finally中最好不要包含return,不然程序會提早退出,返回值不是try或catch中保存的返回值。

有return語句的話,永遠返回finally中的結果

image.png

public static int demo4() {
        int i = 0;
        try {
            return i;
        } finally {
            i = 12;
            System.out.println("finally trumps return.");
            return i;
        }
    }
    //輸出結果
    finally trumps return.
    12

5.子父類異常

①若是父類拋出多個異常,子類重寫父類方法時,拋出
和父類相同的異常
或者父類異常的子類
或者不拋出異常
②父類方法沒有拋出異常,子類重寫時也不能夠拋出異常,只能捕獲處理,不能聲明拋出

(父類異常什麼樣,子類異常就什麼樣)
image.png

經典面試題!!!!!!

public static int demo5() {
        try {
            return printX();
        }
        finally {
            System.out.println("finally trumps return... sort of");
        }
    }
    public static int printX() {

        System.out.println("X");
        return 0;
    }
    
    //輸出結果
    X 
    finally trumps return... sort of 
    0
相關文章
相關標籤/搜索