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:

Osztály betöltése a memóriába

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.PIPIjava.lang.Mathjava.lang.MathPI

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.Classobjektumot, 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
Class a = String.class;
Szerezzen be egy Classobjektumot, amely információkat tartalmaz az Stringosztályról
Class b = Object.class;
Szerezzen be egy Classobjektumot, amely információkat tartalmaz az Objectosztályról
Class c = Integer.class;
Szerezzen be egy Classobjektumot, amely információkat tartalmaz az Integerosztályról
Class d = int.class;
Szerezzen be egy objektumot a típusra Classvonatkozó információkkalint
Class e = void.class;
Szerezzen be egy objektumot a típusra Classvonatkozó 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
Class a = "Hello".getClass();
Ugyanaz a tárgy, mintString.class
Class b = new Integer().getClass();
Ugyanaz a tárgy, mintInteger.class
Class c = Boolean.TRUE.getClass();
Ugyanaz a tárgy, mintBoolean.class