Java 最终引用变量必须在构造函数完成之前初始化?为什么?
在构造函数完成之前,必须初始化最终引用变量 这意味着同样的事情也可以在Java 最终引用变量必须在构造函数完成之前初始化?为什么?,java,Java,在构造函数完成之前,必须初始化最终引用变量 这意味着同样的事情也可以在 以及实例变量声明 final Foo foo = new Foo() 在初始值设定项块中 { foo = new Foo(); } 在构造函数中 public Example() { foo = new Foo(); } 如果我错了,请纠正我?原因是什么?对于原始最终变量(如int或float)的规则是否相同?否,不能从静态块访问实例变量。您所谓的静态块实际上是实例初始值设定项块 此规则的原因是,
final Foo foo = new Foo()
{
foo = new Foo();
}
public Example()
{
foo = new Foo();
}
如果我错了,请纠正我?原因是什么?对于原始最终变量(如
int
或float
)的规则是否相同?否,不能从静态块访问实例变量。您所谓的静态块实际上是实例初始值设定项块
此规则的原因是,最终字段的定义是只能分配一次的字段。如果有可能在方法中的构造函数之后对其进行初始化,编译器将无法知道此方法只调用一次,并且另一个方法在初始化前不会尝试读取字段的值,这使得final
的整个概念毫无用处
在创建构造函数之前,必须初始化最终引用变量
完成
是的。。。应该是。但请记住
static final ClassAbc myObj = new ClassAbc(); // This should be initialize while declaring
// because it is static and visible for every time (donot need object to call it)
要点/原因是,最终变量应该在初始化之前初始化
甚至是可访问的(意思是“可以使用”)
对于像“int”或“final”这样的原始最终变量,规则是否相同
“浮动”
是的,基本类型和非基本类型的规则是相同的。基本最终变量如“int”或“float”的规则是否完全相同?是的,我认为没有任何特殊性。