今天我們來看看Java 異常處理方面的功能增強來自Coin項目的又一個細微語言增強已經被包含在Java 中由谷歌專任工程師兼Java講師Neal Gafter提出的Java增強異常處理功能Open JDK開發的領導者Joe Darcy已經在其博客上宣布了這個變化
此次變動增加了兩處對異常處理機制的細微增強
◆Multicatch開發者現在能夠在一個catch代碼塊中捕獲多個異常類型
◆Final Rethrow它可以讓開發者捕獲一個異常類型及其子類型並且無需向方法聲明中增加拋出子句就能重新將其拋出
過去我們在捕獲多個異常類型時往往會使用以下類型的代碼
} catch (FirstException ex) {
loggererror(ex);
throw ex;
} catch (SecondException ex) {
loggererror(ex);
throw ex;
}
但是以上代碼除了冗長外沒有什麼優點一個解決辦法是找出這兩個異常類型的共同子類型只對其進行捕獲並拋出但是這種方法通常會捕獲一些你並不需要的異常
現在借助於新增的功能開發者可以使用以下代碼
} catch (FirstException | SecondException ex) {
loggererror(ex);
throw ex;
}
這種代碼看上去要簡潔清晰的多
第二個增強功能要復雜一些假如開發者希望捕獲所有異常在進行必要的幾個操作後再將其拋出就代碼編寫而言並不是一件難事但是開發者必須在方法聲明中增加一個拋出子句來管理自己代碼發出的新異常而現在借助於Final Rethrow開發者無需增加一個異常拋出子句就能完成此項任務
try {
// some code
} catch (final Throwable ex) {
// some more code
throw ex;
}
通過使用final關鍵字開發者可以拋出所需的准確動態類型異常這樣如果一個IOException異常發生那麼IOException將被拋出當然開發者必須聲明不被捕獲的異常如果開發者在try代碼塊(在//some more code部分)中沒有捕獲任何異常拋出子句則與以前完全相同反之如果捕獲到某些異常開發者則可以進行相應處理
Java 中的multicatch是一個非常好的功能但是final rethrow對程序員來說並不常用
原文題目Better exception handling in Java : Multicatch and final rethrow
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26609.html