Initialization order of classes in Java
I. initialization order of test single class
public class ClassInitOrderTest { //Static variables public static String staticField = "static field"; //Static code block static { System.out.println(staticField); System.out.println("static block"); } //Member variables private String field = "member field"; //Non static code block { System.out.println(field); System.out.println("non-static block"); } //constructor public ClassInitOrderTest() { System.out.println("constructor"); } public static void main(String[] args) { new ClassInitOrderTest(); } }
Program output:
static field static block member field non-static block constructor
Conclusion:
Static variable > static initial block > member variable > non static initial block > constructor
Class initialization order in test inheritance
class Parent { //Parent static variable private static String parentStaticField = "parent static field"; //Parent static code block static { System.out.println(parentStaticField); System.out.println("parent static block"); } //Member variables private String parentField = "parent member field"; //Non static code block { System.out.println(parentField); System.out.println("parent non-static block"); } //Parent constructor public Parent() { System.out.println("parent constructor"); } } public class Child extends Parent { //Subclass static variable private static String childStaticField = "child static field"; //Subclass static code block static { System.out.println(childStaticField); System.out.println("child static block"); } //Subclass member variable private String childField = "child member field"; //Subclass non static code block { System.out.println(childField); System.out.println("child non-static block"); } //Subclass constructor public Child() { System.out.println("child constructor"); } public static void main(String[] args) { new Child(); } }
Output results:
parent static field parent static block child static field child static block parent member field parent non-static block parent constructor child member field child non-static block child constructor
Conclusion:
Parent static variable > parent static initial block > subclass static variable > subclass static initial block > parent member variable > parent non static initial block > parent constructor > subclass member variable > subclass non static initial block > subclass constructor