首页 > 试题广场 >

当实例化子类对象时,如果有以下几个会被加载,那么加载的顺序是

[单选题]
java中,当实例化子类对象时,如果有以下几个会被加载,那么加载的顺序是什么?
(1)父类静态代码块
(2)父类构造函数
(3)父类非静态代码块
(4)子类静态代码块
(5)子类构造函数
(6)子类非静态代码块
  • 1->2->4->3->5->6
  • 1->2->3->4->5->6
  • 1->4->3->2->6->5
  • 2->1->3->4->5->6
  • 1->4->3->6->2->5
类初始化是类加载过程的最后一步,是执行类构造器<clinit>()方法的过程,<clinit>()方法是由编译器自动收集所有的类变量的赋值动作和静态语块中的语句合并产生.它和类的构造函数(<init>)方法不同,它不用显示的调用父类构造器,虚拟机会保证子类的<clinit>方法实行之前,父类的<clinit>方法已经执行完毕. 因此在虚拟机中第一个被执行的<client>方法的类肯定是java.lang.Object.
发表于 2018-05-27 20:06:22 回复(0)
正确顺序如下:
(1)    父类静态代码块
(4)    子类静态代码块
(3)    父类非静态代码块
(2)    父类构造函数
(6)    子类非静态代码块
(5)    子类构造函数

发表于 2019-08-28 16:22:59 回复(0)
 在创建对象前,先进行类的初始化,类的初始化会将所有非静态代码块收集起来先执行,而父类必须先于子类初始化,所以父类静态代码块先执行,接着是子类静态代码块。此时类初始化完成。接下来要创建子类实例,子类通过super()调用父类构造方法,在执行构造方法之前要先执行非静态代码块,所以顺序是 父类非静态代码块 》 父类构造函数 》 子类非静态代码块 》 子类构造函数
发表于 2019-08-02 21:06:14 回复(0)