执行顺序 : 对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序以此是(静态变量、静态初始化块)>(变量、初始化块)>构造器
第一种情形
父类和子类 都有动态代码块和静态快时
父类和子类 都有动态代码块和静态快时
class Father { { System.out.println("父类构造块");// 3 } static { System.out.println("父类静态块");// 1 } } public class Lianxi14 extends Father { { System.out.println("子类构造块");// 4 } static { System.out.println("子类静态块");// 2 } public static void main(String[] args) { new Lianxi14(); } 输出结果为: 父类静态块 子类静态块 父类构造块 子类构造块
第二种情形 在父类和子类中加入构造函数 class Father { { System.out.println("父类构造块");// 3 } static { System.out.println("父类静态块");// 1 } Father() { System.out.println("父类构造函数");//4 } } public class Lianxi14 extends Father { { System.out.println("子类构造块");// 5 } static { System.out.println("子类静态块");// 2 } Lianxi14() { System.out.println("子类构造函数");//6 } public static void main(String[] args) { new Lianxi14(); } } 执行顺序如下: 父类静态块 子类静态块 父类构造块 父类构造函数 子类构造块 子类构造函数 2013。9.22 阿里笔试题 public class Ali { private static int k = 0;private static Ali t3; private static Ali t1 = new Ali("t1"); private static Ali t2 = new Ali("t2"); private static int i = print("i"); private static int n = 99; { print("构造块"); } static { print("静态块"); } public Ali(String s) { System.out.println(++k + ":" + s + " i:" + i + " n:" + n); } private static int print(String s) { System.out.println(++k + ":" + s + " i:" + i + " n:" + n); n++; return ++i; } public static void main(String[] args) { Ali t = new Ali("init"); } } 执行顺序: 1:构造块 i:0 n:0 2:t1 i:1 n:1 3:构造块 i:1 n:1 4:t2 i:2 n:2 5:i i:2 n:2 6:静态块 i:3 n:99 7:构造块 i:4 n:100 8:init i:5 n:101