子類異常和父類異常捕獲的關係
阿新 • • 發佈:2019-02-03
class ExampleA extends Exception{ private String a=null; //這裡必須加上無參的建構函式,因為自己定義了有參的建構函式,則會覆蓋原來無參建構函式 //但是子類構造物件時候會先呼叫父類的建構函式,其中會預設先呼叫super方法,該方法是呼叫父類的無參建構函式,若沒有定義就會報錯 public ExampleA(){}//所以必須寫出無參的建構函式,寫了有參就要寫無參,除非程式不再呼叫無參的,否則呼叫就會報錯 public ExampleA(String a){ this.a=a; } } //當構造物件時候就會預設呼叫super方法,先呼叫父類的無參建構函式,super預設呼叫的 class ExampleB extends ExampleA{ private String b=null; public ExampleB(String b){ this.b=b; } } //最後的輸出僅僅只是Example public class Test7 { public static void main(String[] args) { // TODO Auto-generated method stub //這裡丟擲一個ExampleB類物件的一個異常 try{ throw new ExampleB("b"); //這裡先catch該父類ExampleA中異常 }catch(ExampleA e){ //若捕獲到就輸出EXampleA System.out.println("ExampleA"); //這裡數ExampleA的父類,但是這裡捕獲不到異常new ExampleB(“b”)異常了,因為異常已經被子類ExampleA捕獲走了,除非子類捕獲不到的異常才會執行捕獲 //但是如果先catch父類的異常,子類的異常就會失效,不會執行 }catch(Exception e){ //所以該catch語句就不會執行了,即不會再輸出”Example“ System.out.println("Example"); } } }