關於java runtimeException和exception的兩種異常的用途
阿新 • • 發佈:2019-01-23
網上摘得一段話,比喻的很恰當:
繼承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的方法,呼叫者需要明確知道這個方法裡會出現什麼異常,並提示呼叫者要去處理這個可能得異常。