java静态代码块,构造代码块,构造函数执行执行顺序
public class InchoateLoadSon extends InchoateLoad {
public InchoateLoadSon() {
System.out.println("class InchoateLoadSon");
}
{ System.out.println("I'm InchoateLoadSon class"); }
static { System.out.println("class InchoateLoadSon static"); }
public static void main(String[] args) {
new InchoateLoadSon();
}
public class InchoateLoad {
public InchoateLoad() {
System.out.println("class InchoateLoad");
}
{ System.out.println("I'm InchoateLoad class"); }
static { System.out.println("class InchoateLoad static"); }
}
结果:
静态初始化块 > 初始化块 > 构造器 父类 > 子类 综合下来顺序就是: 父类静态初始化块 子类静态初始化块 父类初始化块 父类构造器 子类初始化块 子类构造器 需要注意静态初始化块是在类第一次加载的时候就会进行初始化。
public class B
{
public static B t1 = new B();
public static B t2 = new B();
{
System.out.println("构造块");
}
static
{
System.out.println("静态块");
}
public static void main(String[] args)
{
B t = new B();
}
}
结果:
构造块 构造块 静态块 构造块
这里要注意的是,并不是静态块最先初始化,而是静态域.
而静态域中包含静态变量、静态块和静态方法,其中需要初始化的是静态变量和静态块.而他们两个的初始化顺序是靠他们俩的位置决定的!
So!
初始化顺序是 t1 t2 静态块
参考:https://blog.****.net/lahand/article/details/80310313