Конструктор
Як спростити ініціалізацію класу
Ініціалізувати кожне поле щоразу може бути незручно. Для таких цілей у класах існують конструктори. Синтаксис конструктора виглядає так:
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. Який із наведених фрагментів коду демонструє правильний спосіб створення параметризованого конструктора?
Дякуємо за ваш відгук!