Java中異常類的編寫

在我們系統中我們經常需要編寫自己的異常類,那我們應該如果編寫呢?今天我們就來看一下,話不多說上個類圖展示一下

java的異常類設計


Throwable是異常類的祖先,提供了異常類的基本的獲取錯誤棧的深度,獲取錯誤棧元素的本地方法,錯誤棧打印,序列化,message獲取,Throwable的實例cause的獲取,其中最重要的錯誤棧打印調用的爲本地方法:

private native Throwable fillInStackTrace(int dummy);

Error與Exception功能實現都是一樣的,只是使用場景稍有不同

Error一般用於永遠都不應該發生的錯誤,如jvm異常崩潰,資源耗盡等,這些應該再設計系統時進行評估給足資源,還有就是jvm的異常崩潰退出在程序運行時永遠不會發生,而且Error在編譯期間編譯器是不會進行檢查的,因爲永遠不應該發生Error,所以程序中也不應該對Error進行捕捉或者繼續拋出。


Exception爲應用程序需要捕捉的錯誤,非RuntimeException子類下的Exception如果希望能夠被拋出的話需要在方法前拋出此異常方法前加上throws ,此類exception稱爲checked exceptions

checked exception是必須要被處理的,即A方法拋出check exception,B方法調用了A方法,那麼B必須要捕捉或者繼續拋出

而繼承了RuntimeException的異常希望拋出的話是不需要throw的,RuntimeException稱爲unchecked exceptions

unchecked exceptions一般是不強制調用者捕捉或者繼續拋出,可以不用處理,因爲此類錯誤一般是由於程序設計的問題產生的

nullpointexception,IndexOutOfBoundsException,java.lang.ArithmeticException: / by zero


總結存在3中異常類

  1. Error
  2. Exception(非RuntimeException)
  3. RuntimeException

Error一般用在永遠不會出現的錯誤

RuntimeException一般用於表示由於程序設計漏洞產生的錯誤

Exception(非RuntimeException)表示流程類的錯誤類

所以在我們的日常使用中可以使用Exception(非RuntimeException)的情況會居多

一般的寫法爲

實現Exception重載的幾種構造函數即可

編寫error與RuntimeException也差不多


異常類的設計

RumtimeException     爲隱性向上拋出的特性

非RumtimeException 則爲顯性的向上拋出

這裏的隱性與顯性是我借用生物遺傳中的隱性與顯性;具體就是隱性不需要調用者進行聲明向上拋出或者捕捉,而顯性則需要顯。

這裏多說一句如果 @Transactional 沒有設置rollbackForspring屬性的事務回滾只支持RumtimeException

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章