Java 異常分類

Java異常Exception 科技 第1张

Throwable類有兩個直接子類:

Exception:出現的問題是可以被捕獲的;

Error:系統錯誤,通常由JVM處理。

可捕獲的異常又可以分為兩類:

(1)checked異常: 直接派生自Exception的異常類,必須被捕獲或再次聲明拋出。

無能為力、引起注意型 --- 如SQLException(字段超長),只需要保存異常線程,人工介入解決。

可以處置型 --- 如發生未授權異常(UnAuthorizedException),可以跳轉至權限申請頁面。

(2)unchecked異常( RuntimeException):派生自RuntimeException的異常類。使用throw語句可以隨時拋出這種異常對象。

throw new ArithmeticException(…);

可預測異常(Predicted Exception)--- 如IndexOutOfBoundsException、NullPointerException,應該提前做好邊界檢查、空指針判斷。

需捕捉異常(Caution Exception) --- 如DubboTimeoutException,客戶端必須顯式處理,可以重試或者降級處理等等。

可透出異常(Ignored Exception)--- 框架或系統產生的,且會自行處理,而程序無須關心。

Java異常Exception 科技 第2张

Java異常Exception 科技 第3张

異常拋出設計:

對外提供的開發接口,建議使用錯誤碼;

公司內部跨應用遠程服務調用,優先考慮使用Result 對象來封裝錯誤碼、錯誤描述信息;

應用內部,則推薦直接拋出異常對象;

防止NPE(NullPointerException),一定是調用方的責任,需要調用方進行事先判斷。兩個關鍵字 throw 和throws 的區別throw new Exception(...);

throw -- 在方法內部拋出具體異常類對象的關鍵字;

throws -- 用在方法signature 上,表示方法調用者可以此方法聲明向上拋出異常對象。