Java 构造函数中的初始化块
我知道初始化块在构造函数中调用“super()”之后运行。但是,今天早上查看一些代码时,我发现了以下内容:Java 构造函数中的初始化块,java,constructor,initialization,Java,Constructor,Initialization,我知道初始化块在构造函数中调用“super()”之后运行。但是,今天早上查看一些代码时,我发现了以下内容: public class SimpleListLocalsAnalysis extends BackwardFlowAnalysis FlowSet emptySet; public SimpleLiveLocalsAnalysis(UnitGraph graph) { super(graph); { Chain
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);
}
}
初始化块将在编译时复制到每个构造函数的开头(在超级调用之后)
因此,可能作者复制并粘贴了代码块到错误的位置;他将其复制到构造函数中,而不是在构造函数外部。那么“简单块”的用途是什么?为什么要用它?你可以利用它的范围。。您可以在此块中执行一些本地操作。好的,为了确保您定义的内容在块外不可访问?这就是你使用它们的原因吗?有道理。奇怪的是,我以前从未见过他们。谢谢你的澄清。