Каков внутренний процесс, стоящий за этой ошибкой «переменная Y не инициализирована в конструкторе по умолчанию» в java? - PullRequest
0 голосов
/ 11 апреля 2020

Я хочу знать об этой ошибке " переменная Y не инициализирована в конструкторе по умолчанию ", что происходит внутри ...

static final int y;
public static void main(String[] as){
System.out.println(y);
}
  1. Я использовал stati c переменная не экземпляр, а силл, который я получил.
  2. Почему он инициализируется только в sameline или stati c block .
  3. Что такое список конструктор по умолчанию .

Ответы [ 3 ]

0 голосов
/ 11 апреля 2020

1. Если вы попытаетесь использовать переменные до того, как они имеют значение, вы обычно получите NullPointerException , сообщающее, что эта переменная не имеет значения, кроме null .

2. Вы "создали" константу, которую необходимо назначить до создания объекта. Это можно сделать в stati c -блоке

static {
   //assignment - no logic here!
}

или непосредственно в "create".

3. Стандартный конструктор предназначен только для создания объектов , потому что нет места для присваиваний или логи c (никогда не логи c в конструкторе) . Если вы не измените это.

0 голосов
/ 11 апреля 2020

Я использовал переменную stati c не экземпляр, а sill, я получил

Это не из-за ключевого слова static; это из-за ключевого слова final, которое требует инициализации y. Если вы удалите ключевое слово final из объявления, оно без проблем скомпилируется.

Почему оно инициализируется только в блоке sameline или stati c.

Опять же, если он был объявлен как final, он должен быть инициализирован с объявлением. Инициализация его в stati c блоке не будет работать.

Что такое бросок конструктора по умолчанию.

Проверка Java конструктор по умолчанию

0 голосов
/ 11 апреля 2020
  1. Я использовал переменную stati c, а не экземпляр, но все равно получил variable Y not initialized in the default constructor.

Ошибка вводит в заблуждение. Часть конструктора по умолчанию должна игнорироваться. Остальная часть ошибки верна.

Почему он инициализируется только в той же строке или блоке c.

Он должен быть инициализирован перед вводом класса в эксплуатацию. Это единственные два места, где вы можете сделать это, поэтому его нужно инициализировать ровно в одном из них.

Какова роль конструктора по умолчанию.

Как уже упоминалось для # 1, здесь он не играет роли.

...