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的类初始化顺序是 :
1.父类的静态变量
2.父类的静态代码块
3.子类的静态变量
4.子类的静态代码块
5.父类成员变量
6. 父类的构造代码块
7.父类的构造函数
8.子类成员变量
9.子类的构造代码块
10.子类的构造函数