Конечная переменная, возможно, уже была назначена

У меня есть переменная, которая должна быть 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? и как мне побороть эту проблему?


ИЗМЕНИТЬ:

Лучший ответ на этот вопрос здесь пользователя НПЕ.


person Roshana Pitigala    schedule 03.05.2018    source источник
comment
Это не проверенное исключение, а ошибка времени компиляции. Поскольку блок try может быть многострочным, а другие строки после x = (1 / 0); могут вызывать Exceptions, присваивание в блоке catch может быть повторным присваиванием, отсюда и ошибка времени компиляции.   -  person Turing85    schedule 03.05.2018
comment
@ Turing85 Я этого не видел, хорошая мысль. Спасибо.   -  person Roshana Pitigala    schedule 03.05.2018