java中什么叫多重捕獲MultiCatch,它的用法是怎樣的
多重捕獲MultiCatch
馬克-
to-win:馬克 java社區(qū):防盜版實(shí)名手機(jī)尾號(hào): 73203。
馬克-to-win:什么叫多重捕獲MultiCatch?一段代碼可能引起多個(gè)異常,這時(shí)可以定義兩個(gè)或更多的catch子句來(lái)處理這種情況,每個(gè)子句捕獲一種類(lèi)型的異常。馬克-to-win:異常被引發(fā)時(shí),每一個(gè)catch塊兒被依次檢查,第一個(gè)匹配異常類(lèi)型的catch塊兒被執(zhí)行。馬克-to-win:當(dāng)一個(gè)catch塊兒執(zhí)行以后,其他的catch塊兒被跳過(guò),繼續(xù)try/catch塊以后的代碼。像switch一樣。
例:1.2.1-本章源碼
public class Test {
public static void main(String[] args) {
int arg1;
int result;
String s="abc";
// String s="12";
try {
arg1 = Integer.parseInt(s); //馬克-to-win:這里會(huì)發(fā)生異常,所以try塊中后面語(yǔ)句執(zhí)行不了, 進(jìn)入catch 塊兒
result = arg1 /0;
System.out.println("try部分沒(méi)有完成,所以打印不出這里");
}
catch (NumberFormatException e) {
System.out.println("輸入?yún)?shù)必須為整數(shù)!");
}
System.out.println("馬克-to-win:優(yōu)雅結(jié)束");
}
}
輸出結(jié)果:
輸入?yún)?shù)必須為整數(shù)!
馬克-to-win:優(yōu)雅結(jié)束
觀察上一個(gè)例子可知:用戶(hù)根據(jù)提示,輸入會(huì)變成整數(shù),見(jiàn)下一個(gè)例子。
例:1.2.2-本章源碼
public class Test {
public static void main(String[] args) {
int arg1;
int result;
// String s="abc";
String s="12";
try {
arg1 = Integer.parseInt(s);
result = arg1 /0;//馬克-to-win:這里會(huì)再次拋出異常,使程序崩潰
System.out.println("try中完成finish");
}
catch (NumberFormatException e) {
System.out.println("輸入?yún)?shù)必須為整數(shù)!");
}
System.out.println("馬克-to-win:優(yōu)雅結(jié)束");
}
}
輸出結(jié)果:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test.main(Test.java:9)
觀察例1.2.2可知:馬克-to-win:由于我們少捕獲一個(gè)除0異常,程序崩潰, 很可怕。程序進(jìn)一步修改如下:
例:1.2.3-本章源碼
public class Test {
public static void main(String[] args) {
int arg1;
int result;
// String s="abc";
String s="12";
try {
arg1 = Integer.parseInt(s);
result = arg1 /0;
System.out.println("try中完成finish");
}
catch (NumberFormatException e) {
System.out.println("輸入?yún)?shù)必須為整數(shù)!");
} catch (ArithmeticException e) {
System.out.println("除數(shù)不能為0");
}
System.out.println("馬克-to-win:優(yōu)雅結(jié)束");
}
}
結(jié)果如下:
除數(shù)不能為0
馬克-to-win:優(yōu)雅結(jié)束