java內置異常類之間的繼承關係如圖:
1.
Throwable:
Throwable是 Java 語言中全部錯誤或異常的超類。下一層分爲 Error 和 Exception。java
Error:
Error指的是 Java 運行時內部錯誤和資源耗盡錯誤。 應用程序不拋出此類異常。 這種內部錯誤一旦出現,除了告知用戶並使程序終止以外,再無能無力.。這種狀況不多出現。ide
Exception:
Exception有兩個子類,一個是IOException(編譯器異常),另外一個是RuntimeException(運行時異常)。
2.
其中Java語言規範將派生於Error 類或 RuntimeException 類的全部異常稱爲非受查異常, 全部的其餘異常稱爲受查異常。
常見的非受查異常有:ArrayIndexOutOfBoundsException、IndexOutOfBoundsException、NullPointerException、IllegalStateException等;常見的受查異常有:ClassNotFoundException、IllegalAccessException、InterruptedException、NoSuchFieldException等。code
捕獲異常
1.try/catch語句:
使用 try 和 catch 關鍵字能夠捕獲異常。try/catch 代碼塊放在異常可能發生的地方,try/catch代碼塊中的代碼稱爲保護代碼。
Catch 語句包含要捕獲異常類型的聲明。當保護代碼塊中發生一個異常時,try 後面的 catch 塊就會被檢查。若是發生的異常包含在 catch 塊中,異常會被傳遞到該 catch 塊,這和傳遞一個參數到方法是同樣。
基本語法:對象
try{ 有可能出現異常的語句 ; }[catch (異常類型 異常對象) { } ... ]
2.try/catch/finally語句:
與1是相似的,程序會捕獲try代碼塊裏面的代碼,若捕獲到異常則進行catch代碼塊處理。有finally則在catch處理後執行finally裏面的代碼,而且finally語句不管如何都會執行。
基本語法:blog
try{ 有可能出現異常的語句 ; }[catch (異常類型 異常對象) { } ... ] [finally { 異常的出口 }]
3.自定義類捕獲異常:
java能夠自定義類異常,要注意的是:①全部異常都必須是 Throwable 的子類。②若是但願寫一個檢查性異常類,則須要繼承 Exception 類。③若是你想寫一個運行時異常類,那麼須要繼承 RuntimeException 類。
能夠以下定義異常類:繼承
class MyException extends Exception{ }
拋出異常:
1.throws/throw 關鍵字:若是一個方法沒有捕獲到一個檢查性異常,那麼該方法必須使用 throws 關鍵字來聲明。throws 關鍵字放在方法簽名的尾部。也可使用 throw 關鍵字拋出一個異常,不管它是新實例化的仍是剛捕獲到的。
它們兩個的區別以下:資源
public void test() throws Exception { throw new Exception(); }
throws表示一個方法聲明可能拋出一個異常,throw表示此處拋出一個已定義的異常(能夠是自定義需繼承Exception,也能夠是java本身給出的異常類)。編譯器