Java가 try 블록에서 값을 설정 한 후 catch 블록의 최종 변수에 값을 할당하지 못하게하는 이유는 무엇이든지 예외의 경우 최종 값을 기록 할 수 있습니다. 여기 Java에서 예외가 발생할 경우 최종 변수에 할당
문제를 보여줍니다 예입니다public class FooBar {
private final int foo;
private FooBar() {
try {
int x = bla();
foo = x; // In case of an exception this line is never reached
} catch (Exception ex) {
foo = 0; // But the compiler complains
// that foo might have been initialized
}
}
private int bla() { // You can use any of the lines below, neither works
// throw new RuntimeException();
return 0;
}
}
문제는 해결하려면하지 어렵습니다,하지만 난 컴파일러는이 동의하지 않는 이유를 이해하고 싶습니다.
미리 감사드립니다.
글쎄, 일반적인 '예외'를 잡는다면, 예외를 던질 'foo = x'이후/후에 '발생'할 수 있습니까? 어쩌면 컴파일러가 "안전하게 사용하고 있습니까?" – FromCanada
그게 질문입니다. 하지만 할당이 예외를 던져 결과를 변수에 쓸 수 있다는 것은 정말로 의심 스럽습니다. – Alfonso
"예외가 발생하는 경우이 행에 도달하지 못했습니다."컴파일러가 그 세부 수준에 대한 의도를 알지 못하는 것 같습니다. 그래서 그것이 보이는 것은 foo가 두 번 배정되는 것입니다. 아마도 x가 궁극적으로 불필요하기 때문에 컴파일러가 코드를 foo = bla()로 최적화 할 수 있습니다. 그냥 추측. – greim