public class InitialOderExtends extends Parent { // 静态变量 public static String s_StaticField = "subclass--static variable"; // 变量 public String s_Field = "subclass--variable"; // 静态初始化块 static { System.out.println(s_StaticField); System.out.println("subclass--static block init"); } // 初始化块 { System.out.println(s_Field); System.out.println("subclass--block init"); } // 构造器 public InitialOderExtends() { System.out.println("subclass--constructor"); System.out.println("i=" + i + ",j=" + j); } public static void main(String[] args) { System.out.println("subclass main"); new InitialOderExtends(); } } class Parent { // 静态变量 public static String p_StaticField = "parentclass--static variable"; // 变量 public String p_Field = "parentclass--variable"; protected int i = 1; protected int j = 1; // 静态初始化块 static { System.out.println(p_StaticField); System.out.println("parentclass--static block init"); } // 初始化块 { System.out.println(p_Field); System.out.println("parentclass--block init"); } // 构造器 public Parent() { System.out.println("parentclass--constructor"); System.out.println("i=" + i + ", j=" + j); j = 2; } }
* java类成员的初始化顺序:
父类(静态变量、静态初始化块) > 子类 (静态变量、静态初始化块) > 父类 (成员变量、初始化块)
> 父类构造器 > 子类(成员变量、初始化块) > 子类构造器
* 需要调用父类构造器进行初始化时,子类构造器的第一行代码一定是调用父类构造器。
输出为:
parentclass--static variable
parentclass--static block init
subclass--static variable
subclass--static block init
subclass main
parentclass--variable
parentclass--block init
parentclass--constructor
i=1, j=1
subclass--variable
subclass--block init
subclass--constructor
i=1,j=2