Конструкторы
Введено| English | Значение |
|---|---|
| default constructor/dɪˈfɒlt kənˈstrʌktə/ | Конструктор по умолчанию |
Параметризованный конструктор не предоставляет конструктор без аргументов
- Студент объявляет только конструктор Student(String n). Создание нового объекта new Student("Ada") работает, но new Student() не имеет подходящего конструктора.
- Java предоставляет неявный конструктор по умолчанию только тогда, когда он не объявлен. Чтобы разрешить оба вызова, явно напишите Student() и Student(String n).
Настройка нового объекта
- Конструктор выполняется при создании объекта с
new, чтобы установить его начальное состояние. Он имеет то же имя, что и класс, и не имеет возвращаемого типа (дажеvoid). public Student(String n) { name = n; score = 0; }Его задача: предоставить абсолютно новому объекту разумные начальные значения.
Параметры конструктора
- Параметры позволяют каждому новому объекту начать с собственных значений.
new Student("Ada")передает"Ada"в параметр конструктораn. - Внутри,
name = n;копирует аргумент в экземплярную переменную. Каждое успешное выражениеnewсоздает отдельный объект, даже если его аргументы идентичны. Различные аргументы не обязательно должны приводить к различным значениям полей, если конструктор игнорирует их или нормализует.
Два вызова new Student("Ada") ссылаются на один и тот же объект, потому что аргументы равны.
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
Каждый успешный вызов оператора new конструирует отдельный объект; равные аргументы не делают ссылки равными.
Перегрузка конструкторов
- Класс может иметь несколько конструкторов с разными списками параметров — перегрузка.
Student(String n)иStudent(String n, int s)являются допустимыми. - Java выбирает тот, чьи параметры совпадают с вашими
newаргументами. Это предлагает вызывающим кодам гибкие способы создания объекта.
Конструкторы устанавливают начальное состояние
Каждый новый объект конфигурируется аргументами конструктора.
У конструктора есть...
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
То же имя, что и у класса, нет типа возвращаемого значения — даже void.
Когда выполняется конструктор?
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
new вызывает конструктор для создания объекта.
Если вы не пишете конструктор, Java предоставляет конструктор по умолчанию без параметров.
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
Но написание любого конструктора удаляет эту бесплатную версию по умолчанию.
Как только вы определяете конструктор с параметрами, new Student() все еще работает автоматически.
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
Бесплатная версия по умолчанию исчезла; напишите конструктор без параметров, если он вам нужен.
Написание двух конструкторов с разными списками параметров является примером...
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
Одно имя, разные параметры = перегрузка.
Конструктор по умолчанию
- Если вы не пишете ни одного конструктора, Java предоставляет скрытый дефолтный конструктор без параметров. Сначала поля имеют значения по умолчанию (
0,false,null); затем явные инициализаторы полей могут задавать другие начальные значения. - Но как только вы пишете любой конструктор, это бесплатное значение по умолчанию исчезает. Поэтому, если вам нужен конструктор без аргументов и параметризованный, напишите оба.
У конструктора должно быть имя класса и НЕТ возвращаемого типа — написание void превратит его в обычный метод, а не в конструктор. И как только вы определите любой конструктор, Java перестает предоставлять бесплатный конструктор по умолчанию без аргументов; если вы все еще хотите new Student(), вы должны написать этот конструктор самостоятельно.
Order the steps used to evaluate new Student("Ada").
Сложность 3/5 · 200 монет + небольшой бонус за первое выполнение сегодня
The supplied argument selects a matching constructor; declaring it does not also create a no-argument constructor.
У Counter есть приватное поле int value = 7; и явный конструктор, который затем присваивает value = 9;. Каково значение value непосредственно после создания?
Сложность 2/5 · 140 монет + небольшой бонус за первое выполнение сегодня
Инициализатор поля присваивает 7 до того, как тело конструктора присваивает 9.
Два конструктора для Student:
public Student(String n) { name = n; score = 0; }public Student(String n, int s) { name = n; score = s; }new Student("Ada")→ оценка0;new Student("Bo", 75)→ оценка75.
Перенесите рассуждения на новый случай
- Сравните
class Counter { private int value = 7; }с иначе идентичным классом, у которого явный конструктор присваиваетvalue = 9;. Первый начинается с 7 после своего инициализатора поля; второй завершает построение на значении 9. - Поля получают значения по умолчанию до выполнения инициализаторов полей и тела конструктора. Написанный программистом конструктор без аргументов не является конструктором по умолчанию, предоставляемым компилятором, хотя оба принимают нуль аргументов.
Конструктор (то же имя, что и класс, нет возвращаемого типа) выполняется при new для установки начального состояния объекта, используя параметры для значений на объект. Класс может перегрузить несколько конструкторов. Не пишите конструктор, и Java предоставит по умолчанию конструктор без аргументов — но определение любого конструктора удаляет это бесплатное значение по умолчанию.