1. 通过一个小例子来看具体代码:
package com.lgl.order;
class F {
public F() {
System.out.println("F");
}
}
class StaticF {
public StaticF() {
System.out.println("StaticF");
}
}
class C {
public C() {
System.out.println("C");
}
}
class StaticC {
public StaticC() {
System.out.println("StaticC");
}
}
/**
* 父类
* @author lgl
*
*/
class Father {
private F f = new F(); //普通字段
private static StaticF sf = new StaticF(); //静态字段
{ //Father 普通代码块
System.out.println("Father 普通代码块");
}
static { Father 静态代码块
System.out.println("Father 静态代码块");
}
public Father() {
System.out.println("Father 构造方法");
}
}
/**
* 子类
* @author lgl
*
*/
public class Child extends Father {
private C c = new C(); //普通字段
private static StaticC sc = new StaticC(); //静态字段
{ //Child 代码块
System.out.println("Child 普通代码块");
}
static { //Child 静态代码块
System.out.println("Child 静态代码块");
}
public Child() {
System.out.println("Child 构造方法");
}
public static void main(String[] args) {
Child child = new Child();
}
}
2. 运行结果:
总结,由此可以看出,JAVA 中的初始化顺序为:
父类静态字段(父类静态代码块) > 子类静态字段(子类静态代码块) > 父类普通字段(父类普通代码块) > 父类构造方法 > 子类普通字段(子类普通代码块) > 子类构造方法