1. Створення об'єкта
Нарешті ми дійшли до створення об'єктів. Ви вже стикалися з цим раніше, а тепер ми розглянемо цю тему докладніше. Насправді створювати об'єкти дуже просто.
Для того щоб створити об'єкт, слід використовувати оператор new. Створення об'єкта має приблизно такий вигляд:
new Клас(параметри)
Найчастіше відразу після створення об'єкта ми зберігаємо посилання на нього в змінній, яка теж дуже часто має такий самий тип, як і створюваний об'єкт. Тому зазвичай код створення об'єкта має приблизно такий вигляд:
Клас ім'я = new Клас(параметри)
де Клас ім'я
— це створення нової змінної, а код праворуч від знака рівності — це створення нового об'єкта типу Клас
.
Приклади:
Код | Примітка |
---|---|
|
Створення об'єкта типу Object |
|
Створення об'єкта типу Cat |
|
Створення об'єкта типу Scanner |
Дуже часто програмісти називають змінні таким самим ім'ям, що й класи, тільки з маленької літери. Програміста-початківця такий код може збивати з пантелику:
Код |
---|
|
|
|
Насправді в цьому коді немає нічого страшного — це звичайнісінький код, в якому створюється змінна й одразу ініціалізується об'єктом її ж типу.
Ліворуч від знака рівності — створення змінної. Праворуч — створення об’єкта. І все.
2. Конструктор
Ви, мабуть, часто бачили, що під час створення об'єкта в нього передаються якісь параметри. Причому в деякі об'єкти параметри передаються, а в деякі — ні. Як взагалі працює весь цей механізм із параметрами?
Тут теж усе просто: кожен клас має спеціальний метод (або методи), що відповідають за обробку параметрів під час створення об'єкта. Такі методи називають конструкторами. А один метод, відповідно, конструктором.
Відрізнити метод-конструктор від звичайного методу в коді нескладно. Він має дві особливості:
- Ім'я методу-конструктора збігається з ім'ям його класу (і починається з великої літери).
- Метод-конструктор не має типу повернення значення.
Його загальний вигляд зазвичай такий:
модифікатори Клас(параметри)
{
код
}
Приклад:
Код | Примітка |
---|---|
|
Клас Point Конструктор класу Point |
|
Створення об'єкта класу Point , буде викликано конструктор класу. |
Зверніть увагу на вигляд методу-конструктора: у нього немає типу результату, а ім'я збігається з іменем-класу.
І ще один момент: подивіться на код усередині конструктора. Змінні-параметри конструктора мають ті самі імена, що й поля класу, — x, y. Це стандартна практика, щоб не вигадувати назви змінних. Беруть такі самі імена, як у полів класу, а конфлікт імен вирішують за допомогою ключового слова this.
3. Виклик конструктора
Коли ви створюєте новий об'єкт за допомогою оператора new і команди формату «new Клас(параметри)», відбуваються дві речі:
- Java-машина створює об'єкт типу Клас
- Java-машина викликає для об'єкта конструктор і передає туди ваші параметри
Ви, як програміст, самі вирішуєте, які у вашому класі мають бути конструктори та які параметри мають бути в цих конструкторів.
Припустімо, ви хочете створити клас для обліку котів у притулку для тварин. Тоді ваш клас Cat
може мати такий вигляд:
|
|
|
Так можна |
|
А так — ні. Код не скомпілюється. |
|
І так не можна. Код не скомпілюється. |
Клас Cat
містить лише один конструктор з параметрами name і age. Оскільки інших конструкторів немає, ви повинні під час створення об'єкта передати як параметри ім'я (name
) і вік (age
) кота. Ви не можете не передати параметри в конструктор.
4. Декілька конструкторів
Однак за потреби ви можете додати в клас декілька конструкторів. Жодного обмеження щодо кількості конструкторів або їх параметрів немає. Під час створення об'єкта компілятор сам підбере відповідний за параметрами конструктор.
Код | Примітка |
---|---|
|
|
|
Так можна: буде викликано перший конструктор |
|
Так можна: буде викликано другий конструктор |
|
А так — ні. Код не скомпілюється. |
Ми вирішили врахувати ситуацію, коли вік кота невідомий. На цей випадок додали в код спеціальну константу — UNKNOWN
— і конструктор, який отримує тільки один параметр — ім'я кота.
Зверніть увагу, що ми, як і раніше, ініціалізуємо обидві змінні класу всередині обох конструкторів. Невідомі/відсутні параметри ми замінюємо на константу UNKNOWN
.
Якщо змінній age не присвоїти жодного значення, вона буде зберігати значення за замовчуванням == 0. Але ж знайденому на вулиці кошеняті цілком може бути 0 повних років. Тому нуль у змінній age зовсім необов'язково означає «невідомий вік».
5. Конструктор за замовчуванням
Якщо ви хочете, щоб об'єкти вашого класу створювалися без параметрів, у класі має бути оголошено конструктор без параметрів.
Конструктор без параметрів — це необов'язково конструктор без коду; він може містити код, який ініціалізує змінні класу початковими значеннями:
Код | Примітка |
---|---|
|
|
|
Так можна: буде викликано перший конструктор |
|
Так можна: буде викликано другий конструктор |
Конструктор за замовчуванням
Є дуже важливий момент, про який вам слід знати й пам'ятати.
Якщо у вашому класі немає жодного конструктора, компілятор додасть у ваш клас конструктор-за-замовчуванням — конструктор без параметрів і коду, але з модифікатором public.
Натомість якщо ваш клас містить принаймні один конструктор, то конструктор-за-замовчуванням уже не буде додано — вам доведеться дописати його власноруч.
Код | Примітка |
---|---|
|
|
|
Так можна: буде викликано конструктор-за-замовчуванням |
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ