构造初始化类相关题

运行下列的程序,最后的执行结果为:

class X{
    public Y y=new Y();

    public X(){
        System.out.println("X");
    }
}

class Y{
    public Y(){
        System.out.println("Y");
    }
}
public class Z extends X {
    public Y y=new Y();

    public Z(){
        System.out.println("Z");
    }

    public static void main(String[] args) {
        new Z();
    }
}

在这里插入图片描述

规则:

  1. 创建子类实例的时候,会先构造父类的实例(调用父类的构造方法)

  2. 初始化顺序:先执行就地初始化,再执行代码块,再执行构造方法

  3. 此题先从main方法开始
    在这里插入图片描述

  4. new Z() 的时候,就会先构造父类的实例,进入X中执行

  5. 构造X实例的时候,先就就地初始化,再调用构造方法,于是就进入到Y执行。

  6. 执行Y的构造方法,于是就打印Y

  7. 执行了X的构造方法,于是打印X

  8. 父类X已经准备就绪,于是开始准备Z的初始化

  9. 对于Z来说,也是先执行就地初始化,再调用构造方法。

  10. 就地初始化就是进入到Y执行,只需要调用构造方法即可,打印Y

  11. 然后执行Z自身的构造方法,打印Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值