問題:
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!
分析過程:
三個異常類之間的關係:
對於try..catch捕獲異常的形式來說,可以有多個catch。對於try裏面發生的異常,會根據發生的異常和catch裏面的進行匹配(按照catch塊從上往下匹配),
當它匹配某一個catch塊的時候,它就直接進入到這個catch塊裏面去了,後面再有catch塊的話,它不做任何處理,直接跳過去,全部忽略掉。(有點類似switch case break)
如果有finally的話進入到finally裏面繼續執行。換句話說,如果有匹配的catch,它就會忽略掉這個catch後面所有的catch。
注意問題:
爲了異常捕獲更加的具體,具有繼承關係的 基類放在最後。如果同時存在且基類在子類的前面(java 編譯器會直接報錯 It is already handled by the catch block for 父類(Exception))
根據以上情況:
這三個異常同時存在時 題目中catch 是唯一的一種順序
當然 try ... catch嵌套就另說如:
總結:
異常能確定的精準捕獲,不能確定的就用exception(表示無奈!!!!)
參考資料: