在Java中提供了兩種錯誤的異常類,分別是Error和Exception,它們擁有共同的父類Throwable。Error表示程式在執行期間出現了非常嚴重的錯誤,該錯誤不可恢復,發生在JVM層次,將導致程式終止執行,OutOfMemoryError、ThreadDeath都屬於錯誤;而Exception表示可恢復的異常,可以被編譯器捕捉,分為Checked Exception和RunTime Exception兩大類。

Checked Exception:

這類異常是在程式中最常見的,所有繼承於Exception類並且不是RunTime Exception的異常都是Checked Exception,比如常見的IOException、SQLException。這類異常發生在程式的編譯階段,Java編譯器強制程式去捕獲該類異常,即把所有出現這些異常類的程式碼放到try程式碼塊中,把對異常的處理放在catch塊中,該類異常一般在如下情況下使用:

1. 異常的發生並不會導致程式出錯,進行處理後可以繼續進行後續的操作,例如,連線資料庫失敗後可以重新連線後進行後續操作;

2. 程式依賴於不可靠的外界條件,例如IO系統。

RunTime Exception:

RunTime Exception不同於Checked Exception,編譯器沒有進行強制的捕獲並處理。如果不對這類異常進行處理,將會交由Java虛擬機器進行處理,如NullPointerException異常。常見的RunTime Exception有:NullPointerException、ClassCaseException、ArrayIndexOutOfBoundsException、ArrayStoreException、BufferOverflowException、ArithmeticException等。

出現異常後,系統會一值把異常往上丟擲,知道遇到處理程式碼位置。如果沒有處理程式碼,則拋擲最上層;如果多執行緒就用Thread.run()方法丟擲;如果是單執行緒就用main()方法丟擲。丟擲之後,若果是執行緒那麼該執行緒退出,若果是主程式,那麼主程式退出。因此,如果不對執行時的異常進行處理,後果非常嚴重,一旦發生,執行緒終止,程式退出。處理RunTIme Exception時應該注意以下幾點:

1. 進行異常捕獲時,應該按照縣捕獲子類,再捕獲基類的資訊的原則;

2. 儘早丟擲異常,並對異常進行處理,或者從錯誤中恢復,或者讓程式繼續執行;

3. 根據實際情況自定義繼承於Exception的異常類;

4. 異常能處理就處理,不能處理就丟擲。