Vi har allerede talt om, at klasser er komplekse datatyper. Lad os nu tale lidt om den anden side af klasser - hvordan klasser håndteres af Java-maskinen. Husk, at i Java er alt et objekt, selv en klasse. En klasse er et objekt. Overrasker det dig? Så lad os fortsætte.
Indlæser en klasse i hukommelsen
Faktisk, når en klasse indlæses i hukommelsen, oprettes tre specielle "objekter":
Kort beskrivelse af illustrationen:
Gul rektangel:
Kodefilen gemmes på disken som en fil med filtypenavnet ".class". Den indeholder information om klassen, dens felter og metoder samt kildekoden for metoder, der er kompileret til bytekode.
Orange rektangel:
Når Java-maskinen indlæser en klasse i hukommelsen, kompilerer den bytekoden til maskinkode, der er specifik for computerens processor og operativsystem. Kun Java-maskinen har adgang til denne maskinkode. Som Java-programmører har vi ikke adgang til det.
Grønt rektangel:
Java-maskinen opretter et objekt, der indeholder alle klassens statiske variabler og metoder. Du får adgang til dette "objekt" ved hjælp af klassenavnet.
For eksempel, når du skriver , refererer du til den statiske variabel, der er placeret i klassen. Dette objekt er vores grønne rektangel. Og det er her den statiske variabel er gemt.java.lang.Math.PIPIjava.lang.Mathjava.lang.MathPI
Blå rektangel:
Når Java-maskinen indlæser koden for en klasse i hukommelsen, opretter den et særligt java.lang.Classobjekt, som gemmer information om den indlæste klasse: dens navn, metodenavne, feltnavne og typer osv.
Navnet "Klasse" kan være lidt forvirrende. Det ville give mere mening at kalde det ClassInfo, da denne klasse blot gemmer nogle oplysninger om den indlæste klasse.
Du kan få klasseobjektet for enhver type ved at bruge en kommando som denne:
Class name = ClassName.class;
Eksempler:
| Kode | Bemærk |
|---|---|
|
Få et Classobjekt med information om Stringklassen |
|
Få et Classobjekt med information om Objectklassen |
|
Få et Classobjekt med information om Integerklassen |
|
Få et Classobjekt med information om inttypen |
|
Få et Classobjekt med information om voidtypen |
Du kan også få en reference til et klassebeskrivelsesobjekt fra ethvert objekt, da hvert objekt har den getClass()metode, som det arver fra Objectklassen.
Eksempler:
| Kode | Bemærk |
|---|---|
|
Samme objekt somString.class |
|
Samme objekt somInteger.class |
|
Samme objekt somBoolean.class |
GO TO FULL VERSION