我在维基百科上阅读了关于Java中的final
关键字(https://en.wikipedia.org/wiki/Final_(Java)#Final_variables),并且对第一句话感到有些困惑。它说:
最终变量只能通过初始值设定项或赋值语句初始化一次。
什么是"初始化程序"在这种背景下?我用谷歌搜索并了解了一个"初始化程序块"这是在构造函数之前执行的,但我不认为这是指的是什么,因为初始化程序块仍然可以使用赋值语句完成赋值。什么是"初始化器"哪个可以完成与赋值语句相同的工作?
答案 0 :(得分:4)
维基百科段落的措辞令人难以置信。您可以初始化最终变量
您必须只选择其中一个地方。您无法初始化最终变量两次。
答案 1 :(得分:3)
关键词是一次。你可以做到
final int i = 1;
或强>
final int i;
{
i = 1;
}
哪个是初始化块;是的 - 它将被复制(就像第一个例子一样)到每个构造函数中(如果没有显式提供,则包括默认值)。
答案 2 :(得分:-1)
初始化程序不是指初始化程序块。它指的是一个带有初始化表达式的字段声明,如JLS here中所定义。例如,
class Example {
final Foo theField = new Foo();
}
theField
将是一个具有初始化程序而非
class Example {
final Foo theField;
public Example(Foo foo) {
this.theField = foo; // a normal assignment
}
}
初始值设定项的存在会影响字段是否可以被视为constant variable,constant expression类型。