먼저 초기화하기 전에,이 문제는 앞으로 이러한 좋은 질문과 관련이 있습니다액세스는 모두의
1) Use of uninitialized final field - with/without 'this.' qualifier
2) Why isn't a qualified static final variable allowed in a static initialization block?
을하지만 난에 요청합니다 약간 다른 화각. 기억해야 할 점은 위에서 언급 한 질문에 this
의 필드에 대한 액세스가 Java 7
임을 묻는 것입니다.
제 질문에는 비슷한 점이 있지만 동일하지는 않습니다.
public class TestInit {
final int a;
{
// System.out.println(a); -- compile error
System.out.println(getA());
// a = a; -- compile error
a = getA();
System.out.println(getA());
}
private int getA() {
return a;
}
public static void main(String[] args) {
new TestInit();
}
}
을 그리고 출력은 다음과 같습니다 : 음, 다음 코드를 고려
0
0
여기이 불분명 한 가지가있다 볼 수 있듯이 :
- 비에 액세스하는 또 다른 법적 방법이 있습니다 - 초기화 됨
final
필드 : getter를 사용합니다. - 우리는의 할당은
a = getA();
빈 마지막 필드과 그 법적 로 항상JLS
에 따라 비final
필드에 대한 기본값처럼에 할당 할 것을 고려해야 하는가? 다른 말로 예상되는 행동으로 간주되어야 하는가?
링크 된 질문에는 JLS에서 정한 규칙이 있습니다. 그들은 메소드 호출과 관련하여 아무 것도 말하지 않기 때문에 허용됩니다. –