Java中異常提供了一種識別及響應錯誤情況的一致性機制,有效地異常處理能使程序更加健壯、易於調試。異常之所以是一種強大的調試手段,在於其回答了以下三個問題:
什麼出了錯?
在哪出的錯?
為什麼出錯?
實際生產環境中,有很多其他的考慮。先講基本情況。就拿網絡相關的接口中拋出的IOException來說吧。假設你的程序啟動了一個TCP客戶端,向某一個服務器傳輸一串數據。但這時網絡忽然斷了,可你的程序非常牛,過了五秒鐘重試,兩次之後又通了,於是你繼續傳數據。這時你隔壁家老王把你們家網線震掉了,你的程序無論怎麼重試都無法連接到服務器,試了5次之後決定終止嘗試並彙報問題。
每次網絡中斷都會由JDK底層拋出一個IOException。此時使用的IOException是一個checked exception,因為網絡中斷是可以被恢復的。
所以結論是,Exception的處理並沒有死規矩。何時用什麼樣的異常,是一個需要大量的實際項目積累、試錯才能有把握做好的事情。
使用自定義的“小”異常,控制局部流程。
public class MainAction {
@Autowired
MyService myService;
public void doSth1() {
try {
if (!myService.operationA()) {
throw new OperationFailedException("operationA failed");
}
if (!myService.operationB()) {
throw new OperationFailedException("operationB failed");
}
if (!myService.operationC()) {
throw new OperationFailedException("operationC failed");
}
myService.operationD();
} catch (OperationFailedException e) {
tip(e.getMessage());
} catch(Exception e){
tip("eat shit");
}
}
private class OperationFailedException extends Exception {
public OperationFailedException(String message) {
super(message);
}
}
public void tip(String msg) {
}
}
最後,對於運行時異常、錯誤或可查異常,Java技術所要求的異常處理方式有所不同。
由於運行時異常的不可查性,為了更合理、更容易地實現應用程序,Java規定,運行時異常將由Java運行時系統自動拋出,允許應用程序忽略運行時異常。
尚學堂12大精英團隊+各類實戰項目,真正實現1+1>10的目標效果。幫助學員迅速成長,持久騰飛,成就學員“高富帥”人生;幫助企業技術和團隊成長,成就百年中華名企;助力中國持續成為世界強國而貢獻力量。尚學堂12大精英團隊,覆蓋IT行業十大領域,實戰團隊240人,服務學員累計超過10萬人,就業合作企業數量500+。
閱讀更多 小菜鳥學Java 的文章