1. Създаване на обект
Е, стигнахме до създаването на обекти. Вече сте се сблъсквали с това преди, но сега ще анализираме тази тема по-подробно. Всъщност е много лесно да създавате обекти.
За да създадете обект, трябва да използвате оператора new . Създаването на обект изглежда приблизително така:
new Class(arguments)
След като създадем обект, най-често веднага записваме препратка към него в променлива, която много често споделя същия тип като създадения обект. Това означава, че когато създавате обект, обикновено виждате code като този:
Class name = new Class(arguments)
Къде е създаването на нова променлива, а codeът вдясно от знака за equalsство е създаването на нов обект, чийто тип е .Class name
Class
Примери:
Код | Забележка |
---|---|
|
Създайте Object обект |
|
Създайте Cat обект |
|
Създайте Scanner обект |
Програмистите често наричат променливите след класовете си, но с малка буква. За начинаещ програмист такъв code може да бъде объркващ:
Код |
---|
|
|
|
Няма нищо лошо в този code — това е най-обикновен code, в който се създава променлива и след това веднага се инициализира от обект от същия тип.
Вляво от знака за equalsство имаме създаването на променлива. Вдясно, създаването на обект. Това е.
2. Конструктор
Вероятно сте виждали, че някои аргументи често се предават при създаване на обект. Нещо повече, аргументите се подават за някои обекти, но не и за други. Как работи целият този механизъм с аргументите?
Тук също всичко е просто: всеки клас има специален метод (or методи), които отговарят за обработката на аргументите, предадени при създаването на обект. Тези методи се наричат конструктори . Или когато говорим само за едно: конструкторът .
Разграничаването на метод на конструктор от обикновен метод е лесно. Този метод има две отличителни черти:
- името на конструктора е същото като името на неговия клас (и започва с главна буква)
- конструкторът няма тип връщане.
Най-общо ето How обикновено изглежда:
modifiers Class(arguments)
{
Code
}
Пример:
Код | Забележка |
---|---|
|
Point клас Point клас конструктор |
|
Създайте обект от Point класа. Ще бъде извикан конструкторът на класа. |
Забележете How изглежда конструкторът: той няма тип връщане и името му е същото като името на класа.
И още нещо: погледнете codeа вътре в конструктора. Параметрите на конструктора имат същите имена като полетата на класа: x и y. Стандартна практика е да се избягва създаването на нови имена на параметри. Имената са същите като тези на полетата на класа. Конфликтът с имена се разрешава с помощта на ключовата дума this.
3. Извикване на конструктор
Когато използвате новия оператор и команда като "нов клас ( аргументи )", за да създадете нов обект, се случват две неща:
- Java машината създава обект, чийто тип е Class
- Java машината извиква конструктора на обекта и предава вашите аргументи
Като програмист вие трябва да решите Howви конструктори трябва да има вашият клас и Howви параметри трябва да имат тези конструктори.
Да предположим, че решите да създадете клас за следене на котки в приют за животни. Тогава вашият Cat
клас може да изглежда така:
|
|
|
Това е разрешено |
|
Но това не е позволено Този code няма да се компorра. |
|
А това не е позволено. Този code няма да се компorра. |
Класът Cat
има само един конструктор с параметри име и възраст. Тъй като няма други конструктори, трябва да подадете името на котката ( name
) и възрастта ( age
) като аргументи, когато създавате обект. Предаването на аргументи към конструктора не е задължително .
4. Множество конструктори
Но ако трябва, можете да добавите няколко конструктора към класа. Няма ограничение за броя на конструкторите и техните параметри. Когато създавате обект, компилаторът автоматично избира конструктора, който отговаря на параметрите
Код | Забележка |
---|---|
|
|
|
Това е позволено: първият конструктор ще бъде извикан |
|
Това е позволено: ще бъде извикан вторият конструктор |
|
Но това не е позволено Този code няма да се компorра. |
Решихме да отчетем факта, че възрастта на котката може да не се знае. За да се справим с този случай, добавихме специалната константа UNKNOWN
заедно с конструктор, който има само един параметър - името на котката.
Имайте предвид, че ние все още инициализираме и двете променливи в двата конструктора. Заменяме неизвестните/липсващите параметри с константата UNKNOWN
.
Ако не е присвоена стойност на променливата за възрастта, тогава тя ще има стойност по подразбиране 0. В крайна сметка, коте, намерено на улицата, може да е на 0 пълни години. Това означава, че нула във възрастовата променлива не означава непременно „неизвестна възраст“.
5. Конструктор по подразбиране
Ако искате вашите обекти да бъдат създадени без ниHowви параметри, вашият клас трябва да декларира конструктор без аргументи.
Конструктор без параметри не е непременно конструктор без code. Такъв конструктор може да съдържа code, който инициализира променливи с начални стойности:
Код | Забележка |
---|---|
|
|
|
Това е позволено: първият конструктор ще бъде извикан |
|
Това е позволено: ще бъде извикан вторият конструктор |
Конструктор по подразбиране
Има един много важен момент, който трябва да знаете и запомните.
Ако вашият клас не декларира нито един конструктор , компилаторът ще добави конструктор по подразбиране, който е конструктор без аргументи с публичен модификатор.
Но ако вашият клас декларира дори един конструктор , тогава няма да бъде добавен конструктор по подразбиране и ще трябва да го добавите сами, ако искате.
Код | Забележка |
---|---|
|
|
|
Това е позволено: ще бъде извикан конструкторът по подразбиране |
GO TO FULL VERSION