更新時間:2019-09-17 來源:黑馬程序員 瀏覽量:
在java程序運行中,如果發(fā)成異常,程序立即終止,無法繼續(xù)向下執(zhí)行。為了解決這樣的問題,Java中提供了一種對異常進行處理的方式——異常捕獲。異常捕獲通常使用try…catch語句,具體語法格式如下:
try{
//程序代碼塊
} catch(ExceptionType (Exception 類及其子類) e) {
//對 ExceptionType的處理
}
其中在try代碼塊中編寫可能發(fā)生異常的Java語句,catch代碼塊中編寫針對異常進行處理的代碼。當try代碼塊中的程序發(fā)生了異常,系統(tǒng)會將這個異常的信息封裝成一個異常對象,并將這個對象傳遞給catch代碼塊。catch代碼塊需要一個參數(shù)指明它所能夠接收的異常類型,這個參數(shù)的類型必須是 Exception類或其子類。
public class Example{
public static void main(String [] args){
//下面的代碼定義了一個 try catch語句用于捕獲異常
try{
int result= divide(4,0); //調(diào)用 divide()方法
System.out.println(result);
} catch (Exception e) { //對異常進行處理
System.out.println("捕獲的異常信息為:"+e.getMessage());
}
System.out.printIn("程序繼續(xù)向下執(zhí)行……”);
}
//下面的方法實現(xiàn)了兩個整數(shù)相除
public static divide (int x,int y) {
int result=X / y; //定義一個變量result記錄兩個數(shù)相乘的結(jié)果
return result; //將結(jié)果返回
}
}
運行結(jié)果為:
D:\cn\itcast\chapter04>java Example
捕獲的異常信息為:/ by zero
程序繼續(xù)向下執(zhí)行…
上面案例中,對可能發(fā)生異常的代碼用try…catch語句進行了處理。在try代碼塊中發(fā)生被0除異常,程序會轉(zhuǎn)而執(zhí)行catch中的代碼,通過調(diào)用Exception對象的getMessage()方法,返回異常信息“/by zero”。catch代碼塊對異常處理完畢后,程序仍會向下執(zhí)行,而不會異常終止。
需要注意的是,在try代碼塊中,發(fā)生異常語句后面的代碼是不會被執(zhí)行的,如本例中第6行代碼的打印語句就沒有執(zhí)行。
在程序中,有時候我們希望有些語句無論程序是否發(fā)生異常都要執(zhí)行,這時就可以在try…catch語句后,加一個finally代碼塊,接下來對演示一下finally代碼塊的用法。
public class Example{
public static void main (String[] args) {
//下面的代碼定義了一個try… catch…fina1ly語句用于獲異常
try {
int result= divide(4,0); //調(diào)用 divide()方法
System.out.println(result);
} catch (Exception e){ //對捕獲到的異常進行處理
System.out.println(“捕獲的異常信息為:”+e.getMessage());
return; //用于結(jié)束當前語句
} finally {
System.out.println("進人finally代碼塊”);
}
System.out.println("程序繼續(xù)向下執(zhí)行……”);
}
//下面的方法實現(xiàn)了兩個整數(shù)相除
public static int divide (int x, int y){
int result=x / y; //定義一個變量result記錄兩個數(shù)相除的結(jié)果
return result; //將結(jié)果返回
}
}
運行結(jié)果為:
D:\cn\itcast\chapter04>java Example
捕獲的異常信息為:/ by zero
進入finally代碼塊
在上面例子中catch代碼塊中增加了一個return語句,用于結(jié)束當前方法,此時程序第13行代碼就不會執(zhí)行了,而 finally中的代碼仍會執(zhí)行,并不會被 return語句所影響,也就是說不論程序是發(fā)生異常還是使用 retur語句結(jié)束, finally中的語句都會執(zhí)行,正是由于這種特殊性,在程序設(shè)計時,經(jīng)常會在try… catch后使用 finally代碼塊來完成必須做的事情,例如釋放系統(tǒng)資源。
需要注意的是,finally中的代碼塊有一種情況下是不會執(zhí)行的,那就是在try…catch中執(zhí)行了 System.exit(0)語句。System.exit(0)表示退出當前的Java虛擬機,Java虛擬機停止了,任何代碼都不能再執(zhí)行了。
以上我們介紹了,java異常處理的方法try…catch和finally 希望對您有所幫助,如果想系統(tǒng)學(xué)習(xí)java,請點擊頁面咨詢按鈕,了解黑馬程序員java培訓(xùn)課程詳情。