異常 異常定義 異常是運行過程中出現的錯誤 人為錯誤:填寫錯誤等 隨機錯誤:網路中斷、記憶體耗盡等 一個健壯的程式必須處理各種各樣的錯誤 Java的異常是class Object Throwable Error OutOfMemoryError Exception RuntimeException N ...
異常
異常定義
異常是運行過程中出現的錯誤
- 人為錯誤:填寫錯誤等
- 隨機錯誤:網路中斷、記憶體耗盡等
一個健壯的程式必須處理各種各樣的錯誤
Java的異常是class
-
Object
-
Throwable
-
Error
- OutOfMemoryError
-
Exception
-
RuntimeException
- NullPoiterException
- IllegalArgumentException
-
IOException
-
-
-
繼承關係圖
-
捕獲要求
- Error 及其子類,RuntimeException及其子類不需要捕獲
- Exception及其子類,不包括RuntimeException及其子類
必須捕獲
異常捕獲
try、catch、finally
-
try中一般放置可能發生異常的語句
-
catch 捕獲異常
-
多catch則按順序匹配
- 匹配到了則不再繼續匹配
-
可以捕獲子類異常
-
一個catch可以捕獲多個異常,用”|“合併到一起
-
-
finally
- 不論是否發生異常都會執行的代碼
- 不是必須的
- 總是最後執行
拋出異常
異常的傳播
-
追蹤
- printStackTrace()方法可以列印出調用堆棧
異常的轉換
-
拋出過程中轉換了異常類型
- 用舊異常構建了一個新異常然後拋出
printStackTrace的時候 關鍵字為Caused by
- 用舊異常構建了一個新異常然後拋出
try、catch、filnally
-
一般正常情況,再try中拋出異常,catch捕獲異常,final運行保底代碼
-
如果catch中拋出的異常,會在final運行完畢後拋出
-
異常屏蔽,如果final也拋出異常,將會屏蔽掉catch中的異常
- 解決方法,使用Trrowable的
addSupressed()方法。保留被屏蔽的異常信息。
在捕獲處是同getSuppressed()方法獲取被屏蔽的異常信息
printStackTrace的時候 關鍵字為Suppressed
- 解決方法,使用Trrowable的
NullPointerException
最常見的異常
空指針異常
由JVM拋出
如果一個對象為null,調用其方法或訪問其欄位就會產生
一般避免返回null
- 字元串使用”“,而不是null
- 數組返回空數組,而不是null
如果調用方一定要根據null判斷,比如返回null表示文件不存在,那麼考慮返回Optional
從Java 14開始,如果產生了NullPointerException,JVM可以給出詳細的信息告訴我們null對象到底是誰。
小結
自定義異常
在一個大型項目中,可以自定義新的異常類型,但是,保持一個合理的異常繼承體系是非常重要的。
一個常見的做法是自定義一個BaseException作為“根異常”,然後,派生出各種業務類型的異常。
完整思維導圖
參考
www.liaoxuefeng.com