类与接口初始化顺序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类与接口初始化顺序相关的知识,希望对你有一定的参考价值。
一.类初始化顺序:
(Super的静态变量和Super的静态块)->(Sub的静态块和Sub的静态变量)->(Super的实例变量和Super的普通块)->Super的构造器->(Sub的实例变量和Sub的普通块)->Sub的构造器
括号中的顺序是与在类中的书写顺序对应的,即谁写前面谁就先初始化
二.类初始化条件(当且仅当以下四个条件之一发生类才会初始化)
遇到new getstatic putstatic invokestatic这四个指令时
使用reflect方法对类进行反射调用时
初始化一个类,如果其父类没有进行过初始化,需先触发父类初始化
虚拟机启动,会先初始化主类
注:
类的静态部分只初始化一次
通过数组定义引用类,不会触发此类的初始化
引用常量不会引起定义常量的类的初始化
如果子类调用了父类中的静态变量,那么只父类初始化,子类不用初始化
二.接口初始化:
接口没有静态块,只有静态变量,如果引用了静态变量,如果该变量属于子类,则初始化子类,不要初始化父类,如果属于父类,只初始化父类,不用初始化子类。
以上是关于类与接口初始化顺序的主要内容,如果未能解决你的问题,请参考以下文章