Для следующего кода:
public class StaticFinal
{
private final static int i ;
public StaticFinal()
{}
}
Я получаю ошибку времени компиляции:
StaticFinal.java:7: variable i might not have been initialized
{}
^
1 error
Что соответствует JLS8.3.1.2, в котором говорится, что:
Это ошибка времени компиляции, если пустая конечная переменная класса (§4.12.4) определенно не назначена (§16.8) статическим инициализатором (§8.7) класса, в котором она объявлена.
Итак, вышеуказанная ошибка полностью понята.
Но теперь рассмотрим следующее:
public class StaticFinal
{
private final static int i ;
public StaticFinal()throws InstantiationException
{
throw new InstantiationException("Can't instantiate"); // Don't let the constructor to complete.
}
}
Здесь конструктор никогда не завершается, потому что InstantiationException
выбрасывается в середине конструктора. И этот код компилируется отлично!
Почему это? Почему этот код не показывает ошибку времени компиляции об инициализации переменной final
i
?
ИЗМЕНИТЬ
Я компилирую его с помощью javac 1.6.0_25
в командной строке (не используя какой-либо IDE)