1. 程式人生 > 其它 >陣列中的最長連續序列

陣列中的最長連續序列

異常處理機制

概念

try、catch和finally監測和捕獲

異常捕獲


很明顯除數不能為0,出現了異常

下一步我們去捕獲這個異常

檢測(try)、捕獲(catch)異常


try是監控區域,可以理解為將需要檢驗是否存在異常的程式碼部分在try中經受檢驗

catch用於捕獲異常

需要注意的是,finally部分是可以省略的,但檢測(try)和捕獲(catch)異常部分是必要的

finally

處理善後工作,例如之前學到的scanner.close()關閉互動就放到finally部分

錯誤捕獲

錯誤沒有捕獲成功,為什麼?


原來是因為沒有在catch中宣告錯誤型別

就像是警察逮捕罪犯,有確認罪犯身份資訊的證明(錯誤型別)才能逮捕罪犯

(捕獲錯誤型別)

注意:異常捕獲和錯誤捕獲都要事先宣告異常和錯誤型別

如何確認錯誤和異常型別

如何確認錯誤和異常型別以便進行捕獲?

如下圖程式編譯失敗後會自動報出錯誤和異常型別

***Throwable

如果我懶得確定錯誤型別具體是什麼,完全可以將錯誤型別宣告為throwable

原理如上圖所示,基類throwable包含所有錯誤和異常類

相當於警察抓罪犯找不到罪犯,但可以通過他的犯罪集團來找到集團內部的罪犯(姑且這麼理解)

如下圖所示,很明顯錯誤被成功捕獲了

同理,宣告型別的地方根據需要捕獲的是錯誤還是異常寫Error或者Exception也是可以的

但需要注意的是:捕獲什麼就要宣告什麼!!!!



如上圖,無限迴圈呼叫很明顯是個錯誤捕獲異常當然會失敗,捕獲錯誤才對!如下圖

注意

無論捕獲是否成功,finally都是會正常編譯的,如下圖,捕獲錯誤失敗,但負責處理善後工作的finally正常編譯了

***多重捕獲

1.最大的宣告類要放在最下邊

如上圖,throwable類是最大的,放在最下邊宣告捕獲型別

  • 先捕獲錯誤,很明顯除數不能為0是異常,所以捕獲失敗

    這種說法是錯誤的,我debug了一下,發現捕獲錯誤部分和捕獲throwable部分都沒有執行

  • 捕獲異常,捕獲成功,如下圖

快捷捕獲

選中要監測捕獲的程式碼,Ctrl+Alt+T,選擇下拉選單中的try/catch/finally,如下圖

執行結果自動列印錯誤的棧資訊


丟擲異常:throw和throws


如果我們事先知道某方法會有異常,可以選擇主動丟擲異常

如果在這個方法中我們無法處理這個異常,可以通過throws在方法上丟擲這個異常,讓其他方法去解決這個異常。如下圖所示

main方法中呼叫此有異常的方法時用快捷鍵捕獲異常

如上圖,此時發現程式沒有報異常