参见英文答案 >
Use of uninitialized final field – with/without ‘this.’ qualifier 4个
我写了这段代码,似乎编译器允许在使用’this’关键字访问时访问未初始化的空白最终字段:
public class TestClass
{
public final int value1;
public int value2;
TestClass(int value) {
value2 = 2 + this.value1; // access final field using 'this' before initialization gives no compiler error
//value2 = 2 + value1; // uncomment it gives compile time error - variable value1 might not have been initialized
value1 = value;
}
public static void main(String args[]) {
TestClass tc = new TestClass(10);
System.out.println("\nTestClass Values : value1 = " + tc.value1 + " , value2 = " + tc.value2);
}
}
我尝试在1.5,1.6和& ;;上编译它. 1.7并且在所有这三个中得到了相同的结果.
对我来说,它看起来像编译器错误,因为编译器必须在这种情况下抛出错误但是它没有“this”关键字,因此会产生编码错误的范围,因为程序员不会注意到它,因为没有编译时或运行时错误将被抛出.
几点为什么它不是重复的
– 所有的答案都解释了它是如何工作的以及JLS所说的,很好,但我的真正意图是应该在第一时间允许吗?
– 我的问题更多来自程序员的观点,而不是语言语义