Зміст курсу
Java Extended
Java Extended
Конструктор
Як спростити ініціалізацію класу?
Ініціалізація кожного поля щоразу може бути обтяжливою. Для таких цілей у класах існують конструктори. Синтаксис конструктора виглядає наступним чином:
Main.java
modifier ClassName(ParameterType parameter1, ParameterType parameter2) { this.parameter1 = parameter1; this.parameter2 = parameter2; }
Розглянемо кожне слово, що тут написане:
modifier
: Це означає модифікатор доступу, який часто єpublic
для конструкторів. Випадки, коли конструктор може мати інший модифікатор доступу, будуть розглянуті в окремому курсі;ClassName
: Це просто назва класу, в якому створюється цей конструктор;ParameterType
: Це тип параметра, який буде використовуватися в конструкторі. Тут важливо звернути увагу, оскільки цей параметр повинен бути того ж типу, що й поле в класі; Наприклад: Якщо клас має два параметри,String name
таint age
, то конструктор повинен мати такі ж параметри (якщо потрібно ініціалізувати всі поля через конструктор). Якщо потрібно ініціалізувати лише певне поле класу через конструктор, наприклад,name
, тоді слід використовувати лише один параметр з таким самим типом і назвою, як у поля класу;- Далі, у тілі конструктора, значення полів класу присвоюються за допомогою значень, переданих у параметрі.
Ключове слово "this"
За допомогою ключового слова this
можна звертатися до поля класу, в якому використовується це ключове слово. Наприклад, якщо у класі є два поля: name
та age
, можна написати this.name
всередині конструктора або методу, і це буде посилання саме на поле класу, а не на локальну змінну, яка передається як параметр до конструктора чи методу. Таким чином, можна ініціалізувати поля класу через конструктор, використовуючи синтаксис: this.name = name;
.
Приклад
Розглянемо приклад конструктора у класі, який допоможе ініціалізувати всі поля для кращого розуміння:
Person.java
class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } }
Маємо клас під назвою Person
з трьома полями. Кожне з цих полів було додано до конструктора за допомогою ключового слова this
. Тому конструктор ініціалізує поля значеннями з параметрів. Використаємо цей конструктор у методі main
, щоб побачити, що поля ініціалізуються тими значеннями, які ми передаємо як параметри:
Main.java
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); } }
Ми ініціалізували об'єкт Person
з іменем bob
за допомогою конструктора, передавши name
, age
та gender
як параметри. Далі ми вивели ці параметри на екран і бачимо, що об'єкт має значення полів, які були вказані у параметрах конструктора.
Перевантаження конструктора
Конструктор також може бути перевантажений і не обов'язково охоплювати ініціалізацію всіх полів класу. Наприклад, якщо ми не хочемо вказувати стать Alice, ми можемо перевантажити конструктор, щоб приймати лише 2 параметри та ініціалізувати поля з їх допомогою:
Main.java
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); } }
Можна зробити висновок, що конструктор, як і метод, може бути перевантажений і приймати різну кількість та типи параметрів.
Конструктор за замовчуванням
Конструктор за замовчуванням — це конструктор, який не приймає параметрів і не ініціалізує жодних полів. Він існує у всіх класах за замовчуванням, якщо в них немає інших типів конструкторів, тому його і називають конструктором за замовчуванням. Кожного разу, коли ми створюємо об'єкт будь-якого класу, ми використовуємо конструктор. Щоб скористатися конструктором за замовчуванням, коли вже існує конструктор з параметрами, потрібно також написати порожній конструктор:
Main.java
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } public Person() { } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); Person john = new Person(); System.out.println("John's name: " + john.name + ", John's age: " + john.age); } }
Ми використовуємо 3 різні конструктори для ініціалізації кожного з об'єктів Person
. Як видно з останнього прикладу, у John
немає імені та віку, оскільки ці поля не ініціалізовані для об'єкта. Таким чином, ми можемо перевантажувати конструктор стільки разів, скільки потрібно, і створювати об'єкти за його допомогою.
1. Яке з наступних тверджень про конструктори є правильним?
2. Яке призначення конструктора в Java?
3. Який із наведених фрагментів коду демонструє правильний спосіб створення параметризованого конструктора?
Дякуємо за ваш відгук!