Java 构造函数中的初始化块

Java 构造函数中的初始化块,java,constructor,initialization,Java,Constructor,Initialization,我知道初始化块在构造函数中调用“super()”之后运行。但是,今天早上查看一些代码时,我发现了以下内容: public class SimpleListLocalsAnalysis extends BackwardFlowAnalysis FlowSet emptySet; public SimpleLiveLocalsAnalysis(UnitGraph graph) { super(graph); { Chain

我知道初始化块在构造函数中调用“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();
    }
...
}

上面的代码显示了在“super(graph)”调用之后初始化块中正在进行的一些初始化。将代码放在构造函数内的初始化块中的目的是什么,因为它肯定会在调用super之后运行。我在这里遗漏了什么吗?

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

就像

public void foo(){

  {
      //some code
  }
}
目的:


您可以限制范围

最好的方法是询问代码的作者。也许他包围了代码块以表明这些初始化的重要性。或者他这样做是因为他想显示
局部变量
局部宇宙
仅用于初始化
清空集

另一方面,在Java中,您可以执行以下操作

public class SomeClass extend ParenClass{
    private int val;   

    {
        //initializztion block
        val = -1;
    }

    public SomeClass()
    {
        super();
    }

    public SomeClass(String iniName)
    {
        super(iniName);
    }   
}
初始化块将在编译时复制到每个构造函数的开头(在超级调用之后)


因此,可能作者复制并粘贴了代码块到错误的位置;他将其复制到构造函数中,而不是在构造函数外部。

那么“简单块”的用途是什么?为什么要用它?你可以利用它的范围。。您可以在此块中执行一些本地操作。好的,为了确保您定义的内容在块外不可访问?这就是你使用它们的原因吗?有道理。奇怪的是,我以前从未见过他们。谢谢你的澄清。