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.csdn.net/lahand/article/details/80310313

猜你喜欢

转载自blog.csdn.net/qq_40896997/article/details/89374971