构造函数中的初始化块

Joe*_*dev 2 java constructor initialization

我知道初始化块在构造函数中调用'super()'后运行.但是,今天早上查看一些代码时,我发现了以下内容:

public class SimpleListLocalsAnalysis extends BackwardFlowAnalysis
    FlowSet emptySet;

    public SimpleLiveLocalsAnalysis(UnitGraph graph) {
        super(graph);

        {
            Chain locals = g.getBody().getLocals();
            FlowUniverse localUniverse = new FlowUniverse(locals.toArray());
            emptySet = new ArrayPackedSet(localUniverse);
        }

        doAnalysis();
    }
...
}
Run Code Online (Sandbox Code Playgroud)

上面的代码显示了在'super(graph)'调用之后的初始化块内进行的一些初始化.将代码放在构造函数中的初始化块中的目的是什么,因为它在调用super之后无论如何都会运行.我在这里错过了什么吗?

Jig*_*shi 6

它不是初始化块,它的简单块

就像

public void foo(){

  {
      //some code
  }
}
Run Code Online (Sandbox Code Playgroud)

目的:

您可以限制范围

  • 你可以利用范围..你可以在这个区块做一些本地的东西. (3认同)