Java之Undeclared Checked Exception

Kevin Wan發表於2013-06-28

之前一直認為在Java裡如果每個task是相對獨立、並且是可以容忍錯誤的,那麼只需要處理Checked Exception(這個是Java強制的)和主動處理Unchecked Exception(派生至RuntimeException)即可。

但是昨天在伺服器端程式碼除錯後發現,Java裡面有好多種方法可以throw上面兩種方法不能處理的Undeclared Checked Exception,具體做法可以參考:http://java.dzone.com/articles/throwing-undeclared-checked

而由於我們是使用的netty框架,仔細閱讀其原始碼後發現,netty使用了上面連結裡說的方法一和方法五

Method #1: the sun.misc.Unsafe class

Method #5: Generics

並且netty裡面為了處理未知異常,隔離開各個task的處理,都是捕獲了Throwable,並且發現在netty裡面確實會throw Error的,於是我將原來用來隔離獨立、可以容忍錯誤的task的捕獲RuntimeException改成了捕獲Throwable。

分析總結以後,我將Java的Exception劃分為三類:

Checked Exception

Unchecked Exception

Undeclared Checked Exception

第三種我認為這是java的潛在導致錯誤的問題,但存在了,我們就應該主動處理。

相關文章