必须在构造函数完成之前初始化最终引用变量。
这意味着可以在
时完成相同的操作与实例变量声明一起
final Foo foo = new Foo()
在初始化程序块中
{
foo = new Foo();
}
在构造函数
中public Example()
{
foo = new Foo();
}
如果我错了,请纠正我?是什么原因?原始最终变量(如int
或float
?
答案 0 :(得分:2)
不,无法从静态块访问实例变量。你称之为静态块的实际上是一个实例初始化块。
此规则的原因是最终字段的定义是一个只能分配一次的字段。如果可以在构造函数之后初始化它,在一个方法中,编译器将无法知道此方法只被调用一次,并且另一个方法在初始化之前不会尝试读取该字段的值,使final
的整个概念毫无用处。
答案 1 :(得分:0)
必须在构造函数之前初始化最终引用变量 完整。
是的......它应该是。但请记住
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'或 '漂浮'?
是原始和非原始类型的规则是相同的。