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");
}
}
}
子类异常和父类异常捕获的关系
最新推荐文章于 2022-08-10 15:15:24 发布