這是我參與8月更文挑戰的第6天,活動詳情查看:8月更文挑戰java
在 Java 中,全部的異常都有一個共同的祖先 java.lang.Throwable
類。數組
Throwable
類有兩個重要的子類:Exception
(異常)、Error
(錯誤),它們各自都包含大量子類;markdown
Exception
能被程序自己處理 (try-catch
),Error
是沒法處理的 (只能儘可能避免);post
Error
:Error
屬於程序沒法處理的錯誤,咱們沒辦法經過 catch
來進行捕獲。例如,Java 虛擬機運行錯誤 (Virtual MachineErro)、虛擬機內存不夠錯誤 (OutOfMemoryError) 、類定義錯誤 (NoClassDefFoundError) 等。這些異常發生時,Java 虛擬機通常會選擇線程終止。Exception
:程序自己能夠處理的異常,能夠經過 catch
來進行捕獲。Exception
有能夠分爲 受檢查異常 (必須處理) 和 不受檢查異常 (能夠不處理)。
catch
/throw
處理的話,就沒辦法經過編譯;RuntimeException
及其子類之外,其餘的 Exception
類及其子類都屬於受檢查異常;IOException
、ClassNotFoundException
、SQLException
……RunntimeException
及其子類統稱爲不受檢查異常;NullPointerException
(空指針異常)、NumberFormatException
(字符串轉換爲數字)、ArrayIndexOutOfBoundsException
(數組下標越界)、ClassCastException
(類型轉換異常)、ArithmeticException
(算數錯誤) 等。try
塊:用於捕獲異常,其後可接零個或多個 catch
塊,若是沒有 catch
塊,則必須跟一個 finally
塊;spa
catch
塊:用於處理 try 捕獲到的異常;線程
finally
塊:不管是否捕獲或處理異常,finally
塊裏的語句都會被執行。當在 try
塊或 catch
塊中遇到 return
語句時,finally
語句塊將在方法返回以前被執行指針
public static int test(){
try{
return 5;
} catch (Exception e){
e.printStackTrace();
} finally{
return 8;
}
}
// 最後返回的是:8
複製代碼
** 如下三種特殊狀況下,finally
將不會被執行:code
try
或 catch
塊中用了 System.exit(0)
退出程序;