JAVA捕獲異常小結
阿新 • • 發佈:2018-12-18
上一節的小結: 1、已檢查異常一定要處理,即除了RunTimeExceoption之外的異常子類。 2、一種消極的方法是一直向上丟擲異常,不在函式本階段處理,throws給主函式給JVM。 3、一種積極的做法是用try-catch捕獲異常。 4、多型可以 用在捕獲上面。catch的時候要把子類放前面,父類放後面,不然就會有編譯錯誤。 5、對於java 來說, try 塊中的程式碼是有可能不執行的程式碼例如上例子中輸入4的時候,後面的程式碼是不執行的。
public static int m1(){
try{
return 100;
}catch(Exception e){}
}
函式返回值為int值型別,但是return 語句又不一定會執行,所以,函式是不一定會有一個返回值的,產生編譯錯誤,不可以把返回值放在try塊裡面。 還有一種情況是:
public static void m2(){
int n;
try{
n = 10;
} catch(Exception e){}
System.out.println(n);
}
不能把初始化放在try塊中,不一定會執行,編譯器報錯。
#try-catch中的尾聲finally
static int ma2(int i) { try{ mb(i); return 100; }catch(Exception e){ System.out.println("Exception"); return 200; }finally{ System.out.println("in finally of ma"); return 300; } }
無論有無異常程式的返回值都是300。所以,finally 語句塊中的程式碼,意味著無論程式是否發生異常,都一定要執行。 但有兩種情況: 在進入try塊之前發生異常,程式終止;在try塊中執行了System.exit(0). 正因為 finally 語句塊中的程式碼一定會被執行,因此 finally 語句塊中我們往往會放上一些 釋放資源的程式碼。一些一定要執行的程式碼,例如去銀行取錢,取錢發生了異常但是,一定要吐卡,所以就把吐卡放在finally語句塊中。