Конструктор
Як спростити ініціалізацію класу?
Ініціалізація кожного поля щоразу може бути обтяжливою. Для таких цілей у класах існують конструктори. Синтаксис конструктора виглядає наступним чином:
Main.java
1234modifier 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
1234567891011class 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
123456789101112131415161718192021package 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
12345678910111213141516171819202122232425262728package 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
123456789101112131415161718192021222324252627282930313233package 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. Який із наведених фрагментів коду демонструє правильний спосіб створення параметризованого конструктора?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 2.63
Конструктор
Свайпніть щоб показати меню
Як спростити ініціалізацію класу?
Ініціалізація кожного поля щоразу може бути обтяжливою. Для таких цілей у класах існують конструктори. Синтаксис конструктора виглядає наступним чином:
Main.java
1234modifier 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
1234567891011class 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
123456789101112131415161718192021package 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
12345678910111213141516171819202122232425262728package 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
123456789101112131415161718192021222324252627282930313233package 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. Який із наведених фрагментів коду демонструє правильний спосіб створення параметризованого конструктора?
Дякуємо за ваш відгук!