在 java 里有 3 種異常類型 :
1.?????? 檢查型異常 , 這樣的異常繼承于 Excetpion, 就是在編譯期間需要檢查 , 如果該異常被 throw, 那么在該異常所在的 method 后必須顯示的 throws, 調用該 method 的地方也必須捕獲該異常 , 否則編譯器會拋出異常 .ejb 里的 RemoteException 是一個這樣的異常 .
2.?????? 運行時異常 , 就是在運行期間系統出現的異常 , 該類異常繼承于 RuntimeException, 該類異常在編譯時系統不進行檢查 , 如 NullPointerExcetpion,NumberFormatException.
3.?????? 系統錯誤 , 一般是 JVM 出現異常時拋出的異常 , 如 OutofMemoryError, 這樣的異常在 J2EE 開發中是不用關心的 .
在 J2EE 開發中 , 檢查型異常被濫用以至于過一段時間程序員自己都看不懂拋出這樣的異常 ,. 里面封裝的這些錯誤信息是干什么用的 , 更可怕的是有好多有用的信息找不到了 . 比如 SQLException 和 RemoteException 這樣的異常我們沒必要再進行封裝 , 這樣的異常只對我們調試程序有用 , 而對客戶來說它就是一個 ” 系統錯誤 ” 而已 . 異常處理有一個簡單的原則 , 你什么時候需要封裝自己的檢查型異常 ? 就是你很清楚自己拋出這個異常的用途時 , 比如用戶輸入用戶名和密碼要登錄 , 但用戶名和密碼不匹配 , 你就要定義一個檢查型異常 , 客戶端通過捕獲該異常 , 然后把相應的錯誤信息反饋給客戶 . 而其它的自己未預期的錯誤或者異常比如 SQLException, 只需封裝到 EJBException 中 ,ejb container 會把它的信息追加到 RemoteException 里 , 這樣客戶端捕獲 RemoteException 后把它寫到系統日志里 , 就很容易進行調試 .
關于錯誤代碼 , 一般反饋給客戶的錯誤代碼有兩種類型 :
1.?????? 應用程序級錯誤 , 這些錯誤是由客戶自身的原因引起的 , 比如輸入信息有誤 , 沒有操作該功能的權限 . 對于這樣情況 , 系統應給用戶一個明確的提示 .
2.?????? 系統級異常 , 比如 ” 未連接到服務器 ”,” 服務器忙 ”,” 未連接到數據庫 ”,” 系統錯誤 ”, 這樣的錯誤給客戶帶來的后果是不能進行操作 , 那么下面的戲該由系統管理員和系統開發者去演了 .
個人覺得檢查型異常對應于應用程序級錯誤 , 運行時異常對應于系統級異常 .