Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Конструктор | Класи
Java Extended
course content

Зміст курсу

Java Extended

Java Extended

1. Глибока Структура Java
2. Методи
3. Рядки: Розширений Рівень
4. Класи
5. Класи: Розширений Рівень

book
Конструктор

Як спростити ініціалізацію класу?

Ініціалізація кожного поля щоразу може бути обтяжливою. Для таких цілей у класах існують конструктори. Синтаксис конструктора виглядає наступним чином:

Main.java

Main.java

copy
1234
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

Person.java

copy
1234567891011
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

Main.java

copy
123456789101112131415161718192021
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

Main.java

copy
12345678910111213141516171819202122232425262728
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

Main.java

copy
123456789101112131415161718192021222324252627282930313233
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. Який із наведених фрагментів коду демонструє правильний спосіб створення параметризованого конструктора?

question mark

Яке з наступних тверджень про конструктори є правильним?

Select the correct answer

question mark

Яке призначення конструктора в Java?

Select the correct answer

question mark

Який із наведених фрагментів коду демонструє правильний спосіб створення параметризованого конструктора?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 6

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

course content

Зміст курсу

Java Extended

Java Extended

1. Глибока Структура Java
2. Методи
3. Рядки: Розширений Рівень
4. Класи
5. Класи: Розширений Рівень

book
Конструктор

Як спростити ініціалізацію класу?

Ініціалізація кожного поля щоразу може бути обтяжливою. Для таких цілей у класах існують конструктори. Синтаксис конструктора виглядає наступним чином:

Main.java

Main.java

copy
1234
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

Person.java

copy
1234567891011
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

Main.java

copy
123456789101112131415161718192021
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

Main.java

copy
12345678910111213141516171819202122232425262728
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

Main.java

copy
123456789101112131415161718192021222324252627282930313233
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. Який із наведених фрагментів коду демонструє правильний спосіб створення параметризованого конструктора?

question mark

Яке з наступних тверджень про конструктори є правильним?

Select the correct answer

question mark

Яке призначення конструктора в Java?

Select the correct answer

question mark

Який із наведених фрагментів коду демонструє правильний спосіб створення параметризованого конструктора?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 6
some-alt