在有全局变量、静态全局变量、代码块、静态代码块、构造器,如果子类继承父类,那么初始化顺序是如何的呢?下面用一个简单的例子做实验
public class Parent {
public int a = 1;
private int b = 2;
public static int c = 3;
private static int d = 4;
{
System.out.println("父类代码块中的值" + a);
System.out.println("父类代码块中的值" + b);
}
static{
System.out.println("父类静态代码块中的值" + c);
System.out.println("父类静态代码块中的值" + d);
}
public Parent(){
System.out.println("父类构造器");
}
public void getA(){
System.out.println("parent");
}
}
Child子类,并继承父类
public class Child extends Parent{
public int a = 11;
private int b = 12;
public static int c = 13;
private static int d = 14;
{
System.out.println("子类代码块中的值" + a);
System.out.println("子类代码块中的值" + b);
}
static{
System.out.println("子类静态代码块中的值" + c);
System.out.println("子类静态块中的值" + d);
}
public Child(){
System.out.println("子类构造器");
}
}
然后写一个初始化方法
Child c = new Child();
c.getA();
得到测试结果:
父类静态代码块中的值3
父类静态代码块中的值4
子类静态代码块中的值13
子类静态块中的值14
父类代码块中的值1
父类代码块中的值2
父类构造器
子类代码块中的值11
子类代码块中的值12
子类构造器
parent
一个小小的实验,初始化顺序就一目了然!