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.
Проте, якщо у вашому класі є хоча б один конструктор, конструктор-за-замовчуванням вже додаватися не буде – вам потрібно буде дописати його самостійно.
| Код | Примітка |
|---|---|
|
|
|
Так можна: викличеться конструктор-за-замовчуванням |
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ