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.PI
PI
java.lang.Math
java.lang.Math
PI
Blå rektangel:
Når Java-maskinen indlæser koden for en klasse i hukommelsen, opretter den et særligt java.lang.Class
objekt, 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 Class objekt med information om String klassen |
|
Få et Class objekt med information om Object klassen |
|
Få et Class objekt med information om Integer klassen |
|
Få et Class objekt med information om int typen |
|
Få et Class objekt med information om void typen |
Du kan også få en reference til et klassebeskrivelsesobjekt fra ethvert objekt, da hvert objekt har den getClass()
metode, som det arver fra Object
klassen.
Eksempler:
Kode | Bemærk |
---|---|
|
Samme objekt somString.class |
|
Samme objekt somInteger.class |
|
Samme objekt somBoolean.class |
GO TO FULL VERSION