父类:
public class Father {
static {
System.out.println("父类静态初始化块1");
}
public static int fsm = fatherStaticMethod2();
{
System.out.println("父类非静态初始化块1");
}
public Father() {
System.out.println("父类的构造方法");
}
static {
System.out.println("父类静态初始化块2");
}
public static int fatherStaticMethod1() {
System.out.println("父类的静态方法1");
return 10;
}
public static int fatherStaticMethod2() {
System.out.println("父类的静态方法2");
return 9;
}
{
System.out.println("父类非静态初始化块2");
}
}
子类:
public class Child extends Father {
{
System.out.println("子类非静态初始化块1");
}
static {
System.out.println("子类静态初始化块2");
}
public Child() {
System.out.println("子类的构造方法");
}
public static int childStaticMethod() {
System.out.println("子类的静态方法");
return 1000;
}
static {
System.out.println("子类静态初始化块1");
}
{
System.out.println("子类非静态初始化块2");
}
public static int fsm = childStaticMethod();
public static void main(String[] args) {
Child child = new Child();
}
}
运行结果:
父类静态初始化块1
父类的静态方法2
父类静态初始化块2
子类静态初始化块2
子类静态初始化块1
子类的静态方法
父类非静态初始化块1
父类非静态初始化块2
父类的构造方法
子类非静态初始化块1
子类非静态初始化块2
子类的构造方法
总结(加载顺序从上到下):
父类的静态初始块、静态变量(类中按从上到下顺序加载)
子类的静态初始块、静态变量(类中按从上到下顺序加载)
父类的非静态初始化块
父类的构造方法
子类的非静态初始化块
子类的构造方法