类初始化顺序

当类第一次加载到内存中的时候初始化
  1. 父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
  2. 子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
  3. 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。
  4. 执行父类的构造方法。
  5. 子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
  6. 执行子类的构造方法。
非静态初始化块和静态初始化块的区别?
  • 非静态初始化块主要用于对象的初始化,每次创建对象都要调用一次,其执行顺序在构造方法之前。
  • 静态初始化块主要用来初始化静态变量,只调用一次,类第一次加载到内存中调用。
  • 非静态成员变量不能在静态方法中使用,同样也不能在静态初始化中初始化
如何验证静态变量和静态初始化块按代码出现顺序
public class TestOrder {
    
    // 静态初始化块
    static {
        System.out.println("静态初始化块");
    }
    
    // 静态变量
    public static TestA a = new TestA();

    // 静态变量
    public static TestB b = new TestB();

    public static void main(String[] args) {
        new TestOrder();
    }
}

class TestA {
    public TestA() {
        System.out.println("Test--A");
    }
}

class TestB {
    public TestB() {
        System.out.println("Test--B");
    }
}

这段代码巧妙运用了类初始化会调用构造方法,让人可以直观的看到变量的初始化过程。

你可能感兴趣的:(类初始化顺序)