關於java runtimeException和exception的兩種異常的用途

原文鏈接:https://www.zhihu.com/question/51970444/answer/128806764

網上摘得一段話,比喻的很恰當:

        繼承Exception還是繼承RuntimeException是由異常本身的特點決定的,而不是由是否是自定義的異常決定的。例如我要寫一個java api,這個api中會調用一個極其操蛋的遠端服務,這個遠端服務經常超時和不可用。所以我決定以拋出自定義異常的形式向所有調用這個api的開發人員周知這一操蛋的現實,讓他們在調用這個api時務必考慮到遠端服務不可用時應該執行的補償邏輯(比如嘗試調用另一個api)。此時自定義的異常類就應繼承Exception,這樣其他開發人員在調用這個api時就會收到編譯器大大的紅色報錯:【你沒處理這個異常!】,強迫他們處理。又如,我要寫另一個api,這個api會訪問一個非常非常穩定的遠端服務,除非有人把遠端服務的機房炸了,否則這個服務不會出現不可用的情況。而且即便萬一這種情況發生了,api的調用者除了記錄和提示錯誤之外也沒有別的事情好做。但出於某種不可描述的蛋疼原因,我還是決定要定義一個異常對象描述“機房被炸”這一情況,那麼此時定義的異常類就應繼承RuntimeException,因爲我的api的調用者們沒必要了解這一細微的細節,把這一異常交給統一的異常處理層去處理就好了。

作者:二大王
鏈接:https://www.zhihu.com/question/51970444/answer/128806764
來源:知乎

著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

總結一下, 拋出 RuntimeException(運行期纔可以發現的異常),調用方法的程序員不需要知道會出這個異常,拋出Exception的方法,調用者需要明確知道這個方法裏會出現什麼異常,並提示調用者要去處理這個可能得異常。

簡單的說,非RuntimeException必要自己寫catch塊處理掉。

RuntimeException不用try catch捕捉將會導致程序運行中斷,若用則不會中斷

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