Java 构造函数及类成员变量初始化顺序
父类静态成员变量 -> 本类静态变量 -> 父类非静态变量 -> 父类构造函数 -> 本类非静态变量 ->本类构造函数
public class Main { public static void main(String[] args) { TestClass tc = new TestClass(); } private static class Base { public Base(String id) { System.out.println("Base initialized :"+id); } } private static class Parent { Base b2 = new Base("b2"); static Base b4 = new Base("b4"); public Parent() { System.out.println("Parent initialized."); testSync(); } public void testSync() { System.out.println("Parent testSync."); } } //测试java 构造函数和类变量的初始化流程: //static成员变量会最先被初始化 //然后是父类构造函数 //然后是非static成员变量 //然后是本类构造函数 private static class TestClass extends Parent{ private final static Base b = new Base("b1"); private final Base b3 = new Base("b3"); public TestClass() { //super(); synchronized(b3) { System.out.println("TestClass initialized."); } } @Override public void testSync() { synchronized(b) { //crash on synchronized(b3) System.out.println("TestClass testSync."); } } } }
下一篇:
Java---json格式化工具类