在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. 系統級異常,比如”未連接到服務器”,”服務器忙”,”未連接到數據庫”,”系統錯誤”,這樣的錯誤給客戶帶來的後果是不能進行操作,那麼下面的戲該由系統管理員和系統開發者去演了