Вопрос-ответ

Java default constructor

Конструктор Java по умолчанию

Что именно представляет собой конструктор по умолчанию — можете ли вы сказать мне, какой из следующих конструкторов является конструктором по умолчанию и что отличает его от любого другого конструктора?

public Module() {
this.name = "";
this.credits = 0;
this.hours = 0;
}

public Module(String name, int credits, int hours) {
this.name = name;
this.credits = credits;
this.hours = hours;
}
Переведено автоматически
Ответ 1

Ни один из них. Если вы определяете его, он не используется по умолчанию.

Конструктор по умолчанию - это конструктор без аргументов, созданный автоматически, если вы не определили другой конструктор. Для любых неинициализированных полей будут установлены значения по умолчанию. Для вашего примера это будет выглядеть следующим образом, предполагая, что типами являются String, int и int, и что сам класс является общедоступным:

public Module()
{
super();
this.name = null;
this.credits = 0;
this.hours = 0;
}

Это точно то же самое, что и

public Module()
{}

И точно так же, как при полном отсутствии конструкторов. Однако, если вы определяете хотя бы один конструктор, конструктор по умолчанию не создается.

Ссылка: Спецификация языка Java


Если класс не содержит объявлений конструктора, то неявно объявляется конструктор по умолчанию без формальных параметров и без предложения throws .


Разъяснение

Технически это не конструктор (по умолчанию или иной), который инициализирует поля по умолчанию. Однако я оставляю это ответом, потому что


  • в вопросе неверно указаны значения по умолчанию, и

  • конструктор имеет точно такой же эффект, независимо от того, включен он или нет.

Ответ 2

Конструктор по умолчанию создается, если вы не определяете никаких конструкторов в своем классе. Это просто конструктор без аргументов, который ничего не делает. Редактировать: Кроме вызова super()

public Module(){
}
Ответ 3

Конструктор по умолчанию автоматически генерируется компилятором, если вы явно не определили хотя бы один конструктор в своем классе. Вы определили два, поэтому в вашем классе нет конструктора по умолчанию.

Согласно Третьей редакции спецификации языка Java:


8.8.9 Конструктор по умолчанию


Если класс не содержит объявлений конструктора, то автоматически предоставляется конструктор по умолчанию, который не принимает параметров...


Ответ 4

Привет. Насколько мне известно, позвольте мне прояснить концепцию конструктора по умолчанию:


Компилятор автоматически предоставляет конструктор по умолчанию без аргументов для любого класса без конструкторов. Этот конструктор по умолчанию вызовет конструктор суперкласса без аргументов. В этой ситуации компилятор будет жаловаться, если у суперкласса нет конструктора без аргументов, поэтому вы должны убедиться, что он есть. Если у вашего класса нет явного суперкласса, то у него есть неявный суперкласс Object , у которого есть конструктор без аргументов.


Я прочитал эту информацию из руководств по Java.

java