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