JVM加载一个类实例化的过程

<span style="font-size:32px;">子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是?
正确答案: C  

A父类B静态代码块->父类B构造函数->子类A静态代码块->父类B非静态代码块-></span>
<span style="font-size:32px;">子类A构造函数->子类A非静态代码块
B父类B静态代码块->父类B构造函数->父类B非静态代码块->子类A静态代码块-></span>
<span style="font-size:32px;">子类A构造函数->子类A非静态代码块
C父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数-></span>
<span style="font-size:32px;">子类A非静态代码块->子类A构造函数
D父类B构造函数->父类B静态代码块->父类B非静态代码块->子类A静态代码块-></span>
<span style="font-size:32px;">子类A构造函数->子类A非静态代码块</span>


这种题,你不能不懂JVM实例化对象的过程,

我们就把这个过程列出来:

1首先需要虚拟机加载出.class文件,并加载进内存,并会加载该实例的父类(如果该实例有父类,我们为了好讲解,下面都当有父类的情况)

2在堆内存开辟空间,分配地址

3然后是对象中的属性进行初始化

4对应的构造函数进行初始化

5在构造函数中,首先对父类进行初始化

6父类初始化完成后才会对子类属性进行初始化

7子类构造函数进行初始化

8初始化完成后,将地址值赋给引用变量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值