类与接口初始化顺序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类与接口初始化顺序相关的知识,希望对你有一定的参考价值。

一.类初始化顺序:

(Super的静态变量和Super的静态块)->(Sub的静态块和Sub的静态变量)->(Super的实例变量和Super的普通块)->Super的构造器->(Sub的实例变量和Sub的普通块)->Sub的构造器

括号中的顺序是与在类中的书写顺序对应的,即谁写前面谁就先初始化

二.类初始化条件(当且仅当以下四个条件之一发生类才会初始化)

  1. 遇到new  getstatic putstatic invokestatic这四个指令时 

  2. 使用reflect方法对类进行反射调用时

  3. 初始化一个类,如果其父类没有进行过初始化,需先触发父类初始化

  4. 虚拟机启动,会先初始化主类

注:

  1. 类的静态部分只初始化一次

  2. 通过数组定义引用类,不会触发此类的初始化

  3. 引用常量不会引起定义常量的类的初始化

  4. 如果子类调用了父类中的静态变量,那么只父类初始化,子类不用初始化

二.接口初始化:

接口没有静态块,只有静态变量,如果引用了静态变量,如果该变量属于子类,则初始化子类,不要初始化父类,如果属于父类,只初始化父类,不用初始化子类。



以上是关于类与接口初始化顺序的主要内容,如果未能解决你的问题,请参考以下文章

经典类与新式类的继承顺序

类与对象动手动脑

阿里笔试题-派生类构造函数 创建顺序

java中成员变量代码块构造函数运行顺序

第三讲类与对象

数据结构入门顺序表(SeqList)详解(初始化增删查改)