一尘不染

在Java中使用花括号的奇怪行为

java

当我运行以下代码时:

public class Test {

  Test(){
    System.out.println("1");
  }

  {
    System.out.println("2");
  }

  static {
    System.out.println("3");
  }

  public static void main(String args[]) {
    new Test();
  }
}

我希望按以下顺序获得输出:

1
2
3

但是我得到的却是相反的顺序:

3
2
1

谁能解释为什么输出顺序相反?

================

另外,当我创建多个的实例时Test

new Test();
new Test();
new Test();
new Test();

静态块 在第一次执行。


阅读 348

收藏
2020-12-03

共1个答案

一尘不染

这完全取决于初始化语句的执行顺序。您的测试表明此顺序为:

  1. 静态初始化块
  2. 实例初始化块
  3. 建设者

编辑

感谢您的评论,现在我可以引用JVM规范中的相应部分。是详细的初始化过程。

2020-12-03