1. Objektum létrehozása
Nos, elérkeztünk az objektumok létrehozásához. Korábban már találkozott ezzel, de most részletesebben elemezzük ezt a témát. Valójában nagyon könnyű objektumokat létrehozni.
Objektum létrehozásához az új operátort kell használni. Egy objektum létrehozása körülbelül így néz ki:
new Class(arguments)
Egy objektum létrehozása után leggyakrabban azonnal elmentünk egy hivatkozást egy változóba, amely nagyon gyakran ugyanazt a típust használja, mint a létrehozott objektum. Ez azt jelenti, hogy egy objektum létrehozásakor általában a következő kódot látja:
Class name = new Class(arguments)
Hol van egy új változó létrehozása, és az egyenlőségjeltől jobbra lévő kód egy új objektum létrehozása, amelynek típusa .Class name
Class
Példák:
Kód | jegyzet |
---|---|
|
Hozzon létre egy Object objektumot |
|
Hozzon létre egy Cat objektumot |
|
Hozzon létre egy Scanner objektumot |
A programozók gyakran az osztályaik után nevezik el a változókat, de kisbetűvel. Egy kezdő programozó számára ez a kód zavaró lehet:
Kód |
---|
|
|
|
Ezzel a kóddal nincs semmi baj – ez a legáltalánosabb kód, amelyben létrejön egy változó, majd egy azonos típusú objektum azonnal inicializálja.
Az egyenlőségjeltől balra van egy változó létrehozása. Jobb oldalon egy tárgy létrehozása. Ez az.
2. Konstruktor
Valószínűleg látta, hogy bizonyos argumentumok gyakran átadásra kerülnek egy objektum létrehozásakor. Sőt, egyes objektumok mellett érveket adnak át, míg másokat nem. Hogyan működik ez az egész mechanizmus az érvekkel?
Itt is minden egyszerű: minden osztálynak van egy speciális metódusa (vagy metódusai), amelyek az objektum létrehozásakor átadott argumentumok kezeléséért felelősek. Ezeket a módszereket konstruktoroknak nevezzük . Vagy ha csak egyről beszélünk: a konstruktorról .
Könnyű megkülönböztetni a konstruktor metódust a hagyományostól. Ennek a módszernek két megkülönböztető jellemzője van:
- a konstruktor neve megegyezik az osztály nevével (és nagybetűvel kezdődik)
- a konstruktornak nincs visszatérési típusa.
Általában így néz ki:
modifiers Class(arguments)
{
Code
}
Példa:
Kód | jegyzet |
---|---|
|
Point osztályú Point osztályépítő |
|
Hozzon létre egy objektumot az osztályból Point . Meg lesz hívva az osztálykonstruktor. |
Figyeljük meg, hogyan néz ki a konstruktor: nincs visszatérési típusa, és a neve megegyezik az osztály nevével.
És még valami: nézd meg a kódot a konstruktor belsejében. A konstruktor paramétereinek neve megegyezik az osztály mezőivel: x és y. Általános gyakorlat, hogy kerüljük az új paraméternevek kidolgozását. A nevek megegyeznek az osztály mezőinek neveivel. A névütközés feloldása a kulcsszó használatával történik.
3. Konstruktor hívása
Ha az új operátort és egy parancsot, például "új osztály ( argumentumok )" használ egy új objektum létrehozásához, két dolog történik:
- A Java gép létrehoz egy objektumot, amelynek típusa Class
- A Java gép meghívja az objektum konstruktorát, és átadja az argumentumokat
Programozóként el kell döntenie, hogy milyen konstruktorokkal rendelkezzen az osztály, és milyen paraméterekkel rendelkezzenek ezek a konstruktorok.
Tegyük fel, hogy úgy dönt, hogy létrehoz egy osztályt a macskák nyomon követésére egy állatmenhelyen. Akkor az Cat
osztályod így nézhet ki:
|
|
|
Ez megengedett |
|
De ez nem megengedett Ez a kód nem fordítható le. |
|
Ez pedig nem megengedett. Ez a kód nem fordítható le. |
Az Cat
osztálynak csak egy konstruktora van név és életkor paraméterekkel. Mivel nincs más konstruktor, az objektum létrehozásakor argumentumként kell megadnia a macska nevét ( name
) és életkorát ( ). age
Az argumentumok átadása a konstruktornak nem kötelező .
4. Több konstruktor
De ha szükséges, több konstruktort is hozzáadhat az osztályhoz. A konstruktorok száma vagy paraméterei nincsenek korlátozva. Objektum létrehozásakor a fordító automatikusan kiválasztja a paramétereknek megfelelő konstruktort
Kód | jegyzet |
---|---|
|
|
|
Ez megengedett: az első konstruktor meghívásra kerül |
|
Ez megengedett: a második konstruktor meghívásra kerül |
|
De ez nem megengedett Ez a kód nem fordítható le. |
Úgy döntöttünk, hogy figyelembe vesszük azt a tényt, hogy egy macska életkora nem ismert. Ennek az esetnek a kezeléséhez hozzáadtuk a speciális állandót UNKNOWN
egy konstruktorral együtt, amelynek egyetlen paramétere van - a macska neve.
Vegye figyelembe, hogy mindkét változót mindkét konstruktorban inicializáljuk. Az ismeretlen/hiányzó paramétereket a konstansra cseréljük UNKNOWN
.
Ha nincs érték hozzárendelve az életkor változóhoz, akkor az alapértelmezett értéke 0 lesz. Végül is egy utcán talált cica 0 teljes éves lehet. Ez azt jelenti, hogy a nulla az életkor változóban nem feltétlenül jelenti az "ismeretlen életkort".
5. Alapértelmezett konstruktor
Ha azt szeretné, hogy az objektumok paraméterek nélkül példányosodjanak, az osztálynak deklarálnia kell egy argumentummentes konstruktort.
A paraméterek nélküli konstruktor nem feltétlenül konstruktor kód nélkül. Egy ilyen konstruktor tartalmazhat olyan kódot, amely inicializálja a változókat kezdőértékekkel:
Kód | jegyzet |
---|---|
|
|
|
Ez megengedett: az első konstruktor meghívásra kerül |
|
Ez megengedett: a második konstruktor meghívásra kerül |
Alapértelmezett konstruktor
Van egy nagyon fontos pont, amit tudnia kell és emlékeznie kell.
Ha az osztály nem egy konstruktort deklarál , a fordító hozzáad egy alapértelmezett konstruktort, amely egy argumentummentes konstruktor a nyilvános módosítóval.
De ha az osztály csak egy konstruktort deklarál , akkor nem lesz hozzáadva alapértelmezett konstruktor, és ha akarod, magadnak kell hozzáadnod.
Kód | jegyzet |
---|---|
|
|
|
Ez megengedett: az alapértelmezett konstruktor kerül meghívásra |