java对象初始化顺序
class Father { public Father() { System.out.println("父类无参构造方法"); } static { System.out.println("父类静态代码块1"); } private static int a = Help.fatherStaticMemberVarInit(); static { System.out.println("父类静态代码块2"); } { System.out.println("父类普通代码块1"); } private int b = Help.fatherMemberVarInit(); { System.out.println("父类普通代码块2"); } public Father(int v) { System.out.println("父类带参构造方法"); } } class Son extends Father { static { System.out.println("子类静态代码块1"); } private static int a = Help.sonStaticMemberVarInit(); static { System.out.println("子类静态代码块2"); } { System.out.println("子类普通代码块1"); } private int b = Help.sonMemberVarInit(); { System.out.println("子类普通代码块2"); } public Son() { // super(2018); System.out.println("子类构造方法"); } } class Help { public static int fatherStaticMemberVarInit() { System.out.println("父类静态成员变量"); return 0; } public static int fatherMemberVarInit() { System.out.println("父类普通成员变量"); return 0; } public static int sonStaticMemberVarInit() { System.out.println("子类静态成员变量"); return 0; } public static int sonMemberVarInit() { System.out.println("子类普通成员变量"); return 0; } } public class Test { public static void main(String[] args) { Son son1 = new Son(); System.out.println("==================="); Son son2 = new Son(); } }
- 父类静态代码块,父类静态成员变量(同级,按代码顺序执行)
- 子类静态代码块,子类静态成员变量(同级,按代码顺序执行)
- 父类普通代码块,父类普通成员变量(同级,按代码顺序执行)
- 父类构造方法
- 子类普通代码块,子类普通成员变量(同级,按代码顺序执行)
- 子类构造方法
注意点:
- 静态内容只在类加载时执行一次,之后不再执行。
- 默认调用父类的无参构造方法,可以在子类构造方法中利用super指定调用父类的哪个构造方法。
代码测试: