Java代码执行顺序问题—父子类、(实例)初始化块

代码执行顺序应该为:
父类初始化块→子类初始化块
→父类实例初始化块→父类构造器
→子类实例初始化块→子类构造器

则下述代码执行顺序为
a行代码执行前,依次触发父子类初始化块(没有具体代码,则省略细节)
而后,a代码开始执行,触发Base类的实例初始化,即b代码块执行,输出base;
而后父类构造器开始允许,即c代码块开始运行,调用子类中method方法,输出sub 100;
而后 开始进行子类实例初始化块,即d代码块开始运行,输出sub;
最后子类构造器开始运行,e行代码开始执行,调用父类的metho方法。输出base 70;

易错点:
在子类构造器中有两行代码 super();//f
super.method(70);//e
可能会以为在父类构造器运行后(即f行代码),转而就运行e行代码。 错错错!
真实情况是e行代码会在子类实例初始化块结束后才会运行!!!!

public class Test{
    public static void main(String[] args) {
        Sub s = new Sub();//a
    }
}

class Base{
    Base(){//c
        this.method(100);
    }
    {//b
        System.out.println("base");
    }
    public void method(int i){
        System.out.println("base : " + i);
    }
}

class Sub extends Base{
    Sub(){
        super();//f
        super.method(70);//e
    }
    {//d
        System.out.println("sub");
    }
    public void method(int j){//3
        System.out.println("sub : " + j);
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值