java类的初始化顺序

java类的初始化顺序

有关java类的初始化顺序:
最重要的有两点 :
1. 父类初始化顺序优先于子类
2. . 静态的初始化优先于非静态
但是记忆中具体的顺序总是和实际的初始化顺序有些许的出入,为了加深记忆和理解,
自己专门写了一个类来测试类的初始化顺序

测试代码如下:

/**
 * @author xmr
 * @date 2019/2/28 10:48
 * @description
 */
public class ClassLoaderTest {
    public static void main(String[] args) {
        ClassLoaderSon classLoaderSon = new ClassLoaderSon();
    }
    static TestDemo testDemo = new TestDemo();
    TestDemo testDemo2 = new TestDemo(2);
    static {
        System.out.println("初始化父类静态代码块");
    }
    ClassLoaderTest(){
        System.out.println("初始化父类构造方法");
    }
    {
        System.out.println("初始化父类构造代码块");
    }
}
class ClassLoaderSon extends ClassLoaderTest
{
    static TestDemoSon testDemoSon = new TestDemoSon();
    TestDemoSon testDemoSon2 = new TestDemoSon(2);
    static {
        System.out.println("初始化子类静态代码块");
    }
    ClassLoaderSon()
    {
        System.out.println("初始化子类构造方法");
    }
    {
        System.out.println("初始化子类构造代码块");
    }

}
class TestDemo {
    TestDemo() {
        System.out.println("初始化父类静态变量");
    }
    TestDemo(int x)
    {
        System.out.println("初始化父类成员变量");
    }
}
class TestDemoSon {
    TestDemoSon()
    {
        System.out.println("初始化子类静态变量");
    }
    TestDemoSon(int x)
    {
        System.out.println("初始化子类成员变量");
    }
}

程序执行结果如下:
java类的初始化顺序
由此可以得到,java的类初始化顺序是 :

		1.父类的静态变量
	    2.父类的静态代码块
	    3.子类的静态变量
	    4.子类的静态代码块
	    5.父类成员变量
	    6. 父类的构造代码块
	    7.父类的构造函数
	    8.子类成员变量
	    9.子类的构造代码块
	    10.子类的构造函数