Идея переменной final
состоит в том, что она устанавливается один и только один раз.
Например, final
переменные, это означает, что они могут быть установлены только во время инициализации, будь то при объявлении, вконструктор или блок инициализации экземпляра.Чтобы переменная была установлена в другом месте, это должно происходить в неконструкторном методе, который можно вызывать несколько раз - вот почему это запрещено.
Аналогично для static final
переменных ониможет быть установлен только при объявлении или в статическом блоке инициализации.В другом месте, опять-таки, должен присутствовать метод, который можно было бы вызвать более одного раза:
public static void main(String[] args)
{
zero = 0;
main(null);
}
Что касается вашего первого вопроса, я предполагаю, что ошибочно не задавать final
явнопеременная во избежание ошибок программиста.