今天在牛客的题海中再次找虐,题目如下:
1 public class B { 2 public static B t1 = new B(); 3 public static B t2 = new B(); 4 { 5 System.out.println("构造块"); 6 } 7 static 8 { 9 System.out.println("静态块"); 10 } 11 public static void main(String[] args) 12 { 13 B t = new B(); 14 } 15 16 }
按照脑回路一看这题就一股脑儿就直接biu出来了,“先执行静态块,再执行三个构造的代码块”这样子
但是,最后发现这个阿里爸爸的题,还是年轻啊
正确的理解是这样的:
最先初始化的并不是静态块,而是静态域!!!
而静态域中包含的是(静态块、静态变量、静态方法),而最想初始化的是静态变量和静态块,而这俩的初始化顺序则由他们在程序之中的位置决定的。