java 異常分析

問題:

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(表示無奈!!!!)

 

參考資料:
       

        具有繼承關係異常之間的捕獲

        異常分類

              

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章