更新時(shí)間:2022年10月20日13時(shí)46分 來(lái)源:傳智教育 瀏覽次數(shù):
在文件4-24中,由于發(fā)生了異常導(dǎo)致程序立即終止,因此程序無(wú)法繼續(xù)向下執(zhí)行。為了解決異常,Java提供了對(duì)異常進(jìn)行處理的方式——異常捕獲。異常捕獲使用try...cathch語(yǔ)句實(shí)現(xiàn),try...cathch具體語(yǔ)法格式如下:
try{ //程序代碼塊 }catch (ExceptionType (Exception類(lèi)及其子類(lèi)) e) { //對(duì)ExceptionType的處理 }
上述語(yǔ)法格式中,在try代碼塊中編寫(xiě)可能發(fā)生異常的Java語(yǔ)句,在catch代碼塊中編寫(xiě)針對(duì)異常進(jìn)行處理的代碼。當(dāng)try代碼塊中的程序發(fā)生了異常,系統(tǒng)會(huì)將異常的信息封裝成一個(gè)異常對(duì)象,并將這個(gè)對(duì)象傳遞給catch代碼塊進(jìn)行處理。catch代碼塊需要一個(gè)參數(shù)指明它所能接收的異常類(lèi)型,這個(gè)參數(shù)的類(lèi)型必須是Exception類(lèi)或其子類(lèi)。
下面使用try...catch語(yǔ)句對(duì)文件4-24中出現(xiàn)的異常進(jìn)行捕獲,如文件4-25所示。
文件4-25 Example25.java
public class Example25 { public static void main (String[] args) { // 下面的代碼定義了一個(gè)try...catch語(yǔ)句用于捕獲異常 try { int result = divide (4, 0); //調(diào)用divide()方法 System.out.println (result); }catch (Exception e) { //對(duì)異常進(jìn)行處理 System.out.println ("捕獲的異常信息為: " + e.getMessage ()); } System.out.println ("程序繼續(xù)向下執(zhí)行..."); } //下面的方法實(shí)現(xiàn)了兩個(gè)整數(shù)相除 public static int divide (int x, int y) { int result = x / y; //定義一個(gè)變量result記錄兩個(gè)數(shù)相除的結(jié)果 return result; //將結(jié)果返回 } }
在文件4-25中,第4~9行代碼是對(duì)可能發(fā)生異常的代碼用try...catch語(yǔ)句進(jìn)行了處理。在try代碼塊中發(fā)生除0異常外,程序會(huì)通過(guò)catch語(yǔ)句捕獲異常,第8行代碼在catch語(yǔ)句中通過(guò)調(diào)用Exception對(duì)象的getMessage()方法,返回異常信息“/by zero”。catch代碼塊對(duì)異常處理完畢,程序仍會(huì)向下執(zhí)行,而不會(huì)終止程序。
需要注意的是,在try代碼塊中,發(fā)生異常語(yǔ)句后面的代碼是不會(huì)被執(zhí)行的,如文件4-25中第6行代碼的打印語(yǔ)句就沒(méi)有執(zhí)行。
在程序中,有時(shí)候會(huì)希望有些語(yǔ)句無(wú)論程序是否發(fā)生異常都要執(zhí)行,這時(shí)就可以在try...catch語(yǔ)句后加一個(gè)finally代碼塊。
北京校區(qū)