У меня есть переменная, которая должна быть final
по какой-то причине. Но при попытке присвоить ему значение может быть выброшено Exception
в таком случае мне нужно, чтобы оно было 0. Поэтому я попробовал что-то вроде этого.
private static final int x;
static {
try {
x = (1 / 0);
} catch (Exception e) {
x = 0; //error line
}
}
Удивительно, но это дает мне ошибку времени компиляции, говорящую:
переменная
x
могла быть уже назначена.
Я не могу этого понять, x
можно присвоить только в блоке try
ИЛИ в блоке catch
, возможно, где еще можно присвоить значение x
? и как мне побороть эту проблему?
ИЗМЕНИТЬ:
try
может быть многострочным, а другие строки послеx = (1 / 0);
могут вызыватьException
s, присваивание в блокеcatch
может быть повторным присваиванием, отсюда и ошибка времени компиляции. - person Turing85   schedule 03.05.2018