Már beszéltünk arról, hogy az osztályok összetett adattípusok. Most beszéljünk egy kicsit az osztályok másik oldaláról – hogyan kezeli az osztályokat a Java gép. Ne feledje, hogy a Java-ban minden egy objektum, még egy osztály is. Az osztály egy objektum. Ez meglep? Akkor folytassuk.
Osztály betöltése a memóriába
Valójában, amikor egy osztályt betöltenek a memóriába, három speciális "objektum" jön létre:
Az illusztráció rövid leírása:
Sárga téglalap:
A kódfájl a lemezen „.class” kiterjesztésű fájlként kerül tárolásra. Információkat tartalmaz az osztályról, annak mezőiről és metódusairól, valamint a metódusok forráskódját bájtkódba fordítva.
Narancssárga téglalap:
Amikor a Java gép betölt egy osztályt a memóriába, a bájtkódot a számítógép processzorára és operációs rendszerére jellemző gépi kódra fordítja. Csak a Java gép fér hozzá ehhez a gépi kódhoz. Java programozóként nem férünk hozzá.
Zöld téglalap:
A Java gép létrehoz egy objektumot, amely tartalmazza az osztály összes statikus változóját és metódusát. Ehhez az "objektumhoz" az osztálynévvel férhet hozzá.
Például, amikor azt írja , az osztályban található statikus változóra hivatkozik . Ez az objektum a mi zöld téglalapunk. És itt tárolódik a statikus változó.java.lang.Math.PI
PI
java.lang.Math
java.lang.Math
PI
Kék téglalap:
Amikor a Java gép betölti egy osztály kódját a memóriába, akkor létrehoz egy speciális java.lang.Class
objektumot, amely információkat tárol a betöltött osztályról: a nevét, metódusneveit, mezőneveit és típusait stb.
Az "Osztály" név kissé zavaró lehet. Ésszerűbb lenne ClassInfonak nevezni, mivel ez az osztály csak néhány információt tárol a betöltött osztályról.
A Class objektumot bármilyen típushoz megkaphatja egy ehhez hasonló paranccsal:
Class name = ClassName.class;
Példák:
Kód | jegyzet |
---|---|
|
Szerezzen be egy Class objektumot, amely információkat tartalmaz az String osztályról |
|
Szerezzen be egy Class objektumot, amely információkat tartalmaz az Object osztályról |
|
Szerezzen be egy Class objektumot, amely információkat tartalmaz az Integer osztályról |
|
Szerezzen be egy objektumot a típusra Class vonatkozó információkkalint |
|
Szerezzen be egy objektumot a típusra Class vonatkozó információkkalvoid |
Az osztályleíró objektumra bármely objektumból hivatkozást is kaphat, mivel minden objektum rendelkezik a getClass()
metódussal, amelyet az osztálytól örököl Object
.
Példák:
Kód | jegyzet |
---|---|
|
Ugyanaz a tárgy, mintString.class |
|
Ugyanaz a tárgy, mintInteger.class |
|
Ugyanaz a tárgy, mintBoolean.class |
GO TO FULL VERSION