ERROR,一般由虛擬機器拋出,例如OOM、系統中的內部錯誤以及資源耗盡的情形。這種情形程式員不用拋,想拋也拋不了。。
Exception,是所有異常的大爺(父類),這裡我將他簡單的劃分為:RuntimeException和non-RuntimeException。(前者稱為unchecked異常,後者稱為checked異常)
RuntimeException體系,一般都是程式員的錯。例如,錯誤的類型轉換、數組越界訪問和試圖訪問null 指標等等。
- 這種異常,不catch的話,eclipse不會報錯,異常會一直往上拋,直到線程停掉。用於調試,挺好的。
- 當然也可以catch,進行些處理。無視自己已經釀成的錯誤,呵呵,這樣會不會有點鴕鳥了?
- 程式員可以自己在代碼中,多加些判斷,檢查數組下標和數組邊界來避免數組越界訪問等。
non-RuntimeException體系
- 這類異常,往往是外部因素引起的,非程式員本身錯誤。例如,試圖從檔案尾後讀取資料等
- 要拋,且必須要在某層捕捉住。
RuntimeException與Error可以在任何代碼中產生,它們不需要由程式員顯示的拋出,一旦出現錯誤,那麼相應的異常會被自動拋出。遇到Error,程式員一般無能為力。遇到RuntimeException,那麼一定是程式存在邏輯錯誤,要對程式進行修改。
checked異常是由程式員拋出的,這分為兩種情況:程式員調用會拋出異常的庫函數(庫函數的異常由庫程式員拋出);客戶程式員自己使用throw語句拋出異常。只有已檢查異常才是程式員所關心的,程式應該且僅應該拋出或處理已檢查異常。
覆蓋父類某方法的子類方法不能拋出比父類方法更多的異常,所以,有時設計父類的方法時會聲明拋出異常,但實際的實現方法的代碼卻並不拋出異常,這樣做的目的就是為了方便子類方法覆蓋父類方法時可以拋出異常。
http://hi.baidu.com/ailongni/blog/item/ce75c734ec11cb1990ef3988.html