Окончательная инициализация переменной

У меня есть две переменные final, объявленные на уровне класса, но они не инициализированы.
Итак, теперь, когда я пытаюсь создать конструктор по умолчанию для этого класса, выдается сообщение об ошибке
The blank final field may not have been initialized.

Почему возникает эта ошибка? Зачем нужно инициализировать конечные переменные в конструкторе?

У меня есть еще один вопрос: нельзя ли создать экземпляр без конструктора по умолчанию? Даже если у нас есть параметризованный конструктор?


person Saikiran Gosikonda    schedule 26.02.2016    source источник
comment
обратитесь stackoverflow.com/questions/26935453/   -  person sasikumar    schedule 26.02.2016
comment
Вы всегда должны инициализировать окончательные поля с помощью конструктора. Окончательные поля должны быть назначены во время создания объекта. Независимо от конструктора - каждому конечному полю должно быть присвоено значение.   -  person mlewandowski    schedule 26.02.2016
comment
@mlewandowski вам не нужно делать это с помощью конструктора - вы можете напрямую присвоить полю значение или использовать блок инициализатора (которые в основном эквивалентны).   -  person Andy Turner    schedule 26.02.2016


Ответы (2)


Зачем нужно инициализировать конечные переменные в конструкторе?

Поле final должно быть инициализировано в конструкторе, потому что именно это было определено для значения final.

Вам не нужно устанавливать поля final в конструкторе по умолчанию, если вы вызываете конструктор, который делает, например.

class A {
   final int a;

   public A() {
       this(0);
   }

   public A(int a) {
       this.a = a;
   }
}

невозможно ли создать экземпляр без конструктора по умолчанию?

да. Это можно сделать несколькими способами, чаще всего вызывая конструктор, который принимает параметры.

Даже если у нас есть параметризованный конструктор?

В этом случае у вас будет только конструктор, который не принимает параметров, если вы его определили.

person Peter Lawrey    schedule 26.02.2016

Final variable это те переменные which can not be changed once object is initialized. Итак, как бы вы ни инициализировали последнюю переменную. Если вы предоставляете конструктор по умолчанию, а также параметризованный конструктор, вам необходимо инициализировать эту переменную, поскольку вы не можете изменить значение позже.

person Rahul    schedule 26.02.2016