一
結構
Throwable分為Exception和error
Exception分為RuntimeException(運行時異常)和其他異常
主動拋出運行時異常和非運行時異常的區別
1、throw RuntimeException(或運行時異常的子類) 編譯時不會報錯。
2、throw Exception 編譯時會報錯。
原因:正如他們的名字一樣,運行時異常會在運行時檢查,因為Exception既包含運行時異常和其他異常,因此他即會在編譯時檢查,也會在運行時檢查。
二
拋異常時的區別
方式一、在方法上加上 throws Exception
方式二、try-catch后在catch里加上 throw exception/Throwable
區別:
1、在日志報錯時會在try-catch的地方定位錯誤,如果一個方法中 加上了 throws Exception,那么報錯日志不會在這里定位錯誤。
既然catch了異常了,為什么還要拋出呢?
原因:
1、首先就跟上面的這個區別解釋的一樣,這樣的寫法相比于方法上加上 throws exception,它可以在日志中定位異常
2、其次,一般開發者在這里拋出的exception一般都是自己通過繼承RuntimeException定義的異常,在日志中可以明顯的顯示errorMessage和errorCode,再加上全局異常捕獲的話,可以直接在接口返回該errorCode和errorMessage。
什么時候用throws Exception?什么時候用 try-catch throw exception呢?
應用場景一:在寫工具類時,在一個方法最上層try-catch throw exception,該方法的被調用方法都建議寫 throws Exception,maven包同理。