В разделе «Методы и элементы данных» мы упоминали, что объекты в Java инициализируются при их создании. Во время инициализации элементам данных объекта присваиваются начальные значения. Мы можем инициализировать его явно. Если мы не присвоим начальное значение элементу данных, элемент данных примет начальное значение по умолчанию в зависимости от его типа.
Явная инициализация требует от нас определения начального значения при написании программы, что иногда неудобно. Мы можем использовать конструктор для инициализации объектов. Конструкторы могут инициализировать элементы данных и указывать конкретные операции. Эти операции выполняются автоматически при создании объекта.
определить конструктор
Конструктор — это метод. Как и обычные методы, мы определяем конструкторы в классе. Конструкторы имеют следующие основные характеристики:
1. Имя конструктора совпадает с именем класса
2. Конструктор не имеет возвращаемого значения.
Определим конструктор класса Human:
public class Test { public static void main(String[] args) { Human aPerson = new Human(160); (int h) { this.height = h; System.out.println("Я родился" } /** * метод доступа */ int getHeight() { return this.height }; высота интервала;}
Приведенная выше программа напечатает скопированный код кода следующим образом:
я родился
160
Конструкторы могут получать списки параметров подобно обычным методам. Здесь конструктор Human() получает в качестве параметра целое число. В теле метода мы присваиваем целочисленный параметр высоте элемента данных. Конструктор делает две вещи при создании объекта:
Конструкторы могут получать списки параметров подобно обычным методам. Здесь конструктор Human() получает в качестве параметра целое число. В теле метода мы присваиваем целочисленный параметр высоте элемента данных. Конструктор делает две вещи при создании объекта:
1. Укажите начальное значение для элемента данных this.height = h;
2. Выполнить определенные начальные операции System.out.println("Я родился");
Таким образом, мы можем гибко устанавливать начальное значение при вызове конструктора, не подвергаясь таким ограничениям, как явная инициализация.
Как называется конструктор? Когда мы создаем классы, мы все используем new Human(). Фактически мы вызываем конструктор класса Human. Если мы не определим этот метод, Java предоставит пустой конструктор, который будет вызываться при использовании new. Но когда мы определяем конструктор, Java будет вызывать определенный конструктор при создании объекта. При вызове мы предоставляем параметр 160. Из окончательных результатов выполнения вы также можете видеть, что высота объекта действительно инициализируется значением 160.
Приоритет метода инициализации
В методах и элементах данных мы видим, что если мы предоставим явное начальное значение, то элемент данных примет явное начальное значение вместо начального значения по умолчанию. Но если мы одновременно предоставим явное начальное значение и инициализируем один и тот же элемент данных в конструкторе, окончательное начальное значение будет определено конструктором. Например, следующий пример:
public class Test { public static void main(String[] args) { Human aPerson = new Human(160); (int h) { this.height = h; } /** * метод доступа */ int getHeight() { return this.height; } int height=170;
Результат работы:
Скопируйте код кода следующим образом:
160
Окончательное значение инициализации объекта соответствует значению в методе построения. поэтому:
Методы сборки > Явные инициализаторы > Инициализаторы по умолчанию
(На самом деле так называемый приоритет связан с порядком выполнения при инициализации, в этот момент я углублюсь позже)
Перегрузка метода
Класс может определять более одного конструктора, например:
public class Test { public static void main(String[] args) { Human neZha = new Human(150, "shit"); System.out.println(neZha.getHeight()); class Human{ /** *; конструктор 1 */ Human(int h) { this.height = h; System.out.println("Я родился" } /** * конструктор 2 */ Human(int h, String); s) { this.height = h; System.out.println("Не Жа: Я родился, " + s) } /** * метод доступа */ int getHeight() { return this.height } int height; ;}
Результаты запуска:
Скопируйте код кода следующим образом:
Не Жа: Я родился, блин.
150
Выше определены два конструктора, оба с именем Human. Два конструктора имеют разные списки параметров.
При использовании new для создания объекта Java решает, какой конструктор построить, на основе предоставленных параметров. Например, при сборке неЖа мы предоставляем два параметра: целое число 150 и строку «дерьмо», которая соответствует списку параметров второго метода сборки, поэтому Java вызовет второй метод сборки.
В Java Java определяет вызываемый метод на основе имени метода и списка параметров. Это называется перегрузкой метода. Методы сборки могут быть перегружены, а также обычные методы, такие как метод Breath() ниже:
public class Test { public static void main(String[] args) { Human aPerson = new Human(); }}class Human{ /** * Breath() 1 */ void Breath() { System.out.println("ху...ху..."); } /** * Breath() 2 */ void Breath(int Rep) { int i; for(i = 0; i < Rep; i++). ) { System.out.println("lu...lu..."); } } int height;}
Результаты запуска:
Скопируйте код кода следующим образом:
лю...лу...
лю...лу...
лю...лу...
лю...лу...
лю...лу...
лю...лу...
лю...лу...
лю...лу...
лю...лу...
лю...лу...
Как видите, поскольку во время вызова предоставляется параметр: целое число 10, вызывается второй метод Breath(), список параметров которого соответствует ему.
Подвести итог
характеристики конструктора: то же имя, что и класс, без возвращаемого значения.
Назначение конструктора: инициализация, начальная операция, перегрузка метода: имя метода + список параметров -> какой метод на самом деле вызывается