1. 程式人生 > 實用技巧 >Java基礎 四 異常

Java基礎 四 異常

類 ExampleA 繼承 Exception,類 ExampleB 繼承ExampleA

有如下程式碼片斷:

try {
	throw new ExampleB("b")
} catch(ExampleA e){
	System.out.println("ExampleA");
} catch(Exception e){
	System.out.println("Exception");
}

請問執行此段程式碼的輸出是什麼?

輸出:ExampleA。(根據里氏代換原則[能使用父型別的地方一定能使用子型別],抓取 ExampleA 型別異常的 catch 塊能夠抓住 try 塊中丟擲的 ExampleB 型別的異常)

. getCustomerInfo() 方法如下,try 中可以捕獲三種類型的異常,如果在該方法執行中產生了一個 IOException,將會輸出什麼結果? ( A )

public void getCustomerInfo() {
try {
// do something that may cause an Exception
} catch (java.io.FileNotFoundException ex) {
System.out.print("FileNotFoundException!");
} catch (java.io.IOException ex) {
System.out
.print("IOException!");
} catch (java.lang.Exception ex) {
System.out.print("Exception!");
}
}

A IOException

B IOException!Exception!

C FileNotFoundException!IOException!

D FileNotFoundException!IOException!Exception!

解析:考察多個catch語句塊的執行順序。當用多個catch語句時,catch語句塊在次序上有先後之分。從最前面的catch語句塊依次先後進行異常型別匹配,

這樣如果父異常在子異常類之前,那麼首先匹配的將是父異常類,子異常類將不會獲得匹配的機會,也即子異常型別所在的catch語句塊將是不可到達的語句。所以,一般將父類異常類即Exception老大放在catch語句塊的最後一個。