一. 什麼是java裏的異常
1.1定義
異常指的是在程序運行過程中發生的異常事件,通常是由外部問題(如硬件錯誤、輸入錯誤)所導致的。在Java等面向對象的編程語言中異常屬於對象(Exception)。
1.2 java裏運行時出現的錯誤
二.java裏的異常的分類
1.1異常的繼承實現關係
Throwable 代表是可拋出的.
Error:代表的是嚴重錯誤,這種錯誤程序員無法進行處理,例如操作系統崩潰,jvm出錯,動態鏈接庫失敗等(如OutOfMemory)。
Exception:代表的就是異常了。它下面很多派生類,其中它的派生類也分兩種,一種是RuntimeException(運行時異常),其他的都是非運行時異常(如ClassNotFoundException)。
RuntimeException:包括除數爲0,數組下標超界等。運行時異常的派生類有很多,其產生頻率較高.。它的派生類可以由程序處理或者拋給(throw) 給jvm處理。例如上面圖1.2的例子就是拋給了jvm處理,jvm把程序中斷執行,並把錯誤信息輸出到終端上。
非RuntimeExcption:這種異常屬於Excepion的派生類,但是不是RuntimeException的派生類,這種異常必須由程序員手動處理,否則不通過編譯。
ArithmeticExcpetion:算術異常,它是RuntimeException的派生類,所以程序員不手動處理也通過編譯,只不過出錯時會被jvm處理。
三.java裏對異常的處理
3.1對異常的處理try catch,捕獲異常
try catch 捕獲異常,在工作過程中也有叫“吃了異常”。
使用try catch後可以使可能出現異常的代碼塊,在出現時候進行處理(catch之後直接打log並且return上一層結果)。
getMessage():Exception類的方法之一,返回異常的原因,上面的 / by zero 就是這個方法輸出的。
printStackTrace():Exception類的方法之一,在屏幕輸出函數棧信息,也就是異常出現的地方(實現類Throwable的方法)。
可以見到f() 加了個條件判斷,如果參數b = 0,使用throw 直接手動拋出1個異常,讓調用它的函數處理。
g()調用f()函數,預見到f()可能有異常,但是也不想處理,使用throws 關鍵字告訴調用它的函數本函數有可能拋出這種異常。
h()調用g(),簡單g()定義的throws,用try catch在本函數進行處理。
四.Try catch finally 的處理機制
4.1try catch finally
4.1.1 爲什麼需要finally
catch都沒有捕獲到,最終會執行到finally進行處理(雙層保障)。