含有继承的类的初始化顺序:父类的静态变量->父类的静态块->子类静态变量->子类静态初始化块->父类变量->父类初始化块->父类的构造函数->子类的变量->子类初始化块->子类构造函数;(变量和初始化块之间的先后顺序根据类中的先后位置而定)
- public class InitialClassOrderTest extends InitialClassOrderBasic{
- // 静态变量
- public static String staticField = "静态变量";
- // 变量
- public String field = "变量";
- // 静态初始化块
- static {
- System.out.println(staticField);
- System.out.println("静态初始化块");
- }
- // 初始化块
- {
- System.out.println(field);
- System.out.println("初始化块");
- }
- // 构造器
- public InitialClassOrderTest() {
- System.out.println("构造器");
- }
- public static void main(String[] args) {
- new InitialClassOrderTest();
- }
- }
- public class InitialClassOrderBasic {
- // 静态变量
- public static String staticField = "父类静态变量";
- // 变量
- public String field = "父类变量";
- // 静态初始化块
- static {
- System.out.println(staticField);
- System.out.println("父类静态初始化块");
- }
- // 初始化块
- {
- System.out.println(field);
- System.out.println("父类初始化块");
- }
- // 构造器
- public InitialClassOrderBasic() {
- System.out.println("父类构造器");
- }
- }
执行结果:
- 父类静态变量
- 父类静态初始化块
- 静态变量
- 静态初始化块
- 父类变量
- 父类初始化块
- 父类构造器
- 变量
- 初始化块
- 构造器