陣列中的最長連續序列
異常處理機制
概念
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方法中呼叫此有異常的方法時用快捷鍵捕獲異常
如上圖,此時發現程式沒有報異常