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

Java 发表评论
<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初始化完成后,将地址值赋给引用变量。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

昵称 *