以前一直認爲在Java裏若是每一個task是相對獨立、而且是能夠容忍錯誤的,那麼只須要處理Checked Exception(這個是Java強制的)和主動處理Unchecked Exception(派生至RuntimeException)便可。java
可是昨天在服務器端代碼調試後發現,Java裏面有好多種方法能夠throw上面兩種方法不能處理的Undeclared Checked Exception,具體作法能夠參考:http://java.dzone.com/articles/throwing-undeclared-checked服務器
而因爲咱們是使用的netty框架,仔細閱讀其源碼後發現,netty使用了上面連接裏說的方法一和方法五框架
Method #1: the sun.misc.Unsafe classspa
Method #5: Generics調試
而且netty裏面爲了處理未知異常,隔離開各個task的處理,都是捕獲了Throwable,而且發如今netty裏面確實會throw Error的,因而我將原來用來隔離獨立、能夠容忍錯誤的task的捕獲RuntimeException改爲了捕獲Throwable。netty
分析總結之後,我將Java的Exception劃分爲三類:get
Checked Exception源碼
Unchecked Exceptionio
Undeclared Checked Exceptionclass
第三種我認爲這是java的潛在致使錯誤的問題,但存在了,咱們就應該主動處理。