在牛客网做题,遇到关于静态块、main方法、构造块、构造方法的执行顺序的问题,添加该随笔记之。
题目是写出如下java代码执行后所打印的顺序:
1 public class B 2 { 3 public static B t1 = new B(); 4 public static B t2 = new B(); 5 { 6 System.out.println("构造块"); 7 } 8 static 9 { 10 System.out.println("静态块"); 11 } 12 public static void main(String[] args) 13 { 14 B t = new B(); 15 } 16 }
该题重点:
- 静态块(以static开头的部分)在JVM加载该class时只执行一次。
- 在一个类中,静态块和静态属性是优先级别相同的,所以按先后顺序执行。
所以JVM在加载这个类时,首先因为静态块和静态属性优先级别相同,所以按先后顺序是new两个B对象赋予t1和t2, 所以会先打印两次"构造块",紧接着执行静态块,打印"静态块",最后执行静态的main方法,main方法中再次new了一个B对象,所以再次打印"构造块"。
所以该问题的答案为:构造块 构造块 静态块 构造块。
时间: 2024-11-05 19:34:54