Vi har allerede snakket om det faktum at klasser er komplekse datatyper. La oss nå snakke litt om den andre siden av klasser - hvordan klasser håndteres av Java-maskinen. Husk at i Java er alt et objekt, til og med en klasse. En klasse er et objekt. Overrasker det deg? Så la oss fortsette.
Laster en klasse inn i minnet
Faktisk, når en klasse lastes inn i minnet, opprettes tre spesielle "objekter":
Kort beskrivelse av illustrasjonen:
Gult rektangel:
Kodefilen lagres på disken som en fil med filtypen ".class". Den inneholder informasjon om klassen, dens felt og metoder, samt kildekoden til metoder som er kompilert til bytekode.
Oransje rektangel:
Når Java-maskinen laster en klasse inn i minnet, kompilerer den bytekoden til maskinkode spesifikk for datamaskinens prosessor og operativsystem. Bare Java-maskinen har tilgang til denne maskinkoden. Som Java-programmerere har vi ikke tilgang til det.
Grønt rektangel:
Java-maskinen lager et objekt som inneholder alle de statiske variablene og metodene i klassen. Du får tilgang til dette "objektet" ved å bruke klassenavnet.
For eksempel, når du skriver refererer du til den statiske variabelen som ligger i klassen. Dette objektet er vårt grønne rektangel. Og det er der den statiske variabelen er lagret.java.lang.Math.PI
PI
java.lang.Math
java.lang.Math
PI
Blått rektangel:
Når Java-maskinen laster koden til en klasse inn i minnet, lager den et spesielt java.lang.Class
objekt, som lagrer informasjon om den lastede klassen: dens navn, metodenavn, feltnavn og typer, etc.
Navnet "Klasse" kan være litt forvirrende. Det ville være mer fornuftig å kalle det ClassInfo, siden denne klassen bare lagrer litt informasjon om den innlastede klassen.
Du kan få klasseobjektet for enhver type ved å bruke en kommando som denne:
Class name = ClassName.class;
Eksempler:
Kode | Merk |
---|---|
|
Få et Class objekt med informasjon om String klassen |
|
Få et Class objekt med informasjon om Object klassen |
|
Få et Class objekt med informasjon om Integer klassen |
|
Få et Class objekt med informasjon om int typen |
|
Få et Class objekt med informasjon om void typen |
Du kan også få en referanse til et klassebeskrivelsesobjekt fra ethvert objekt, siden hvert objekt har metoden getClass()
som det arver fra Object
klassen.
Eksempler:
Kode | Merk |
---|---|
|
Samme objekt somString.class |
|
Samme objekt somInteger.class |
|
Samme objekt somBoolean.class |
GO TO FULL VERSION