一:異常分類
(1)Throwable類是所有異常的始祖,它有兩個直接子類Error / Exception:
Error僅在Java虛拟機中發生動态連接配接失敗或其它的定位失敗的時候抛出一個Error對象。一般程式不用捕捉或 抛出Error對象。
(2)Unchecked Exception:
a. 指的是程式的瑕疵或邏輯錯誤,并且在運作時無法恢複。
b. 包括Error與RuntimeException及其子類,如:OutOfMemoryError, UndeclaredThrowableException, IllegalArgumentException, IllegalMonitorStateException, NullPointerException, IllegalStateException, IndexOutOfBoundsException等。
c. 文法上不需要聲明抛出異常。
(3)Checked Exception:
a. 代表程式不能直接控制的無效外界情況(如使用者輸入,資料庫問題,網絡異常,檔案丢失等)
b. 除了Error和RuntimeException及其子類之外,如:ClassNotFoundException, NamingException, ServletException, SQLException, IOException等。
c. 需要try catch處理或throws聲明抛出異常。
二:異常處理原則
1、在架構層面封裝checked exception,将其轉化為unchecked exception,避免開發過程中編寫繁冗的try...catch代碼。
2、業務層面的開發,根據程式代碼職責定義不同的RuntimeException(它就是unchecked exception,一般定義為RuntimeException的子類)
3、通過前兩個觀點,系統中自定義的異常将隻存在unchecked exception,系統隻在于用戶端交換資料的上層,設定統一異常處理機制,并将一些異常轉化為使用者所能了解的資訊傳達給使用者。
4、其他如業務層,資料持久層,等底層隻負責将異常抛出即可,但要注意不要丢失掉異常堆棧(這一點是初學者容易犯的一個錯誤)。
三: jersey異常處理機制舉例
(1)在api所在包下,建立ExceptionMapperSupport統一異常處理器
(2)自定義異常
異常父類;持久層異常;業務層異常
(3)Dao層異常統一抛出PersistenceException
(4)業務邏輯層Action抛出WebActionExceptionType
(5):自定義異常友好提示
(6):api調用,異常解析
(7):異常提示效果