Java——異常與捕獲
幾乎所有的程式碼裡面都會出現異常,為了保證程式在出現異常之後可以正常執行完畢,就需要進行異常處理。
異常的繼承類結構:
所有的異常都是由Throwable繼承而來。
Error類:描述Java執行時內部錯誤與資源耗盡錯誤。這種內部錯誤一旦出現,除了告知使用者並使程式安全終止之外,再無能為力。
Exception類(程式出錯)
IOException:程式本身沒問題,由於IO處理導致的程式出錯
RuntimeException:由於程式錯誤導致的。
一、異常分為兩大類:
1.非受查異常(無需強制處理):所有繼承於Error或RuntimeException的異常類稱為非受查異常
2.受查異常(需強制處理):所有繼承於Exception與IOException的類稱為受查異常
二、異常處理格式
try{
可能出現異常的語句
} [catch (異常類 物件)]{
出異常的操作
}[finally]{
異常出口
}
下面的格式都可以使用
try。。。catch。。。
try。。。finally。。。
try。。。catch。。。finally。。。
public class Test{ public static void main(String[] args) { System.out.println("數學計算開始。。。"); try { System.out.println("計算"+ 10 / 0); }catch (Exception e){ System.out.println("分子不能為0"); e.printStackTrace(); } System.out.println("數學計算結束"); } }
無論是否產生異常,無論try catch是否有返回語句,最終都會執行finally塊
列印錯誤堆疊:進行完整異常資訊的輸出。
e.printStackTrace();
三、throws關鍵字——作用於方法上
在進行方法定義時,如果要明確告訴呼叫者本方法可能產生哪些異常,可以使用throws方法進行宣告,表示將異常拋回給呼叫方法。並且當方法出現問題後可以不進行處理。
public class Test{ public static void main(String[] args){ System.out.println("數學計算開始。。。"); try { System.out.println("計算 " + fun(10, 0)); }catch (Exception e){ System.out.println("分子不能為0"); } System.out.println("數學計算結束"); } public static int fun(int a,int b)throws Exception{ return a/b; } }
在出現異常的fun方法中我沒有進行處理,而是通過throws拋給了呼叫fun方法的方法中。這時就需要在主方法中進行處理。
這時主方法也可以通過throws將異常丟擲,交給jvm處理。
四、throw關鍵字——用在方法中
thorw是直接編寫在語句之中,表示人為進行異常的丟擲。如果現在異常類物件例項化不希望由JVM產生而由使用者產
生,就可以使用throw來完成
public class Test{
public static void main(String[] args){
try {
throw new Exception("拋個異常");
}catch (Exception e){
e.printStackTrace();
}
}
}
結果
一般而言throw和break、continue、break都要和if結合使用。
五、自定義異常類
在Java裡,針對於可能出現的公共的程式問題都會提供有相應的異常資訊,但是很多時候這些異常資訊往往不夠我
們使用。如果我們有這樣一個情況1+1不能等於2,那麼程式中出現1+1=2就是一個異常。
我們可以自定義一個異常類來供我們使用,自定義異常類可以繼承兩種父類:Exception、RuntimeException。
class AddException extends Exception{
public AddException(String msg){
super(msg);
}
}
public class Test{
public static void main(String[] args) throws Exception{
int a = 1;
int b = 1;
if(a + b == 2 ){
throw new AddException("1 + 1 不能等於2");
}
}
}
六、Exception與RuntimeException的區別
1. Exception是RuntimeException的父類,使用Exception定義的異常都要求必須使用異常處理,而使用RuntimeException定義的異常可以由使用者選擇性的來進行異常處理。
2. 常見的RuntimeException:ClassCastException、NullPointerException等。