Wir haben bereits darüber gesprochen, dass Klassen komplexe Datentypen sind. Lassen Sie uns nun ein wenig über die andere Seite von Klassen sprechen – wie Klassen von der Java-Maschine gehandhabt werden. Denken Sie daran, dass in Java alles ein Objekt ist, sogar eine Klasse. Eine Klasse ist ein Objekt. Überrascht dich das? Dann lasst uns weitermachen.

Laden einer Klasse in den Speicher

Tatsächlich werden beim Laden einer Klasse in den Speicher drei spezielle „Objekte“ erstellt:

Laden einer Klasse in den Speicher

Kurze Beschreibung der Abbildung:

Gelbes Rechteck:

Die Codedatei wird als Datei mit der Erweiterung „.class“ auf der Festplatte gespeichert. Es enthält Informationen über die Klasse, ihre Felder und Methoden sowie den Quellcode der in Bytecode kompilierten Methoden.

Orangefarbenes Rechteck:

Wenn die Java-Maschine eine Klasse in den Speicher lädt, kompiliert sie den Bytecode in Maschinencode, der für den Prozessor und das Betriebssystem des Computers spezifisch ist. Nur die Java-Maschine hat Zugriff auf diesen Maschinencode. Als Java-Programmierer haben wir keinen Zugriff darauf.

Grünes Rechteck:

Die Java-Maschine erstellt ein Objekt, das alle statischen Variablen und Methoden der Klasse enthält. Auf dieses „Objekt“ greifen Sie über den Klassennamen zu.

Wenn Sie beispielsweise schreiben , beziehen Sie sich auf die statische Variable in der Klasse. Dieses Objekt ist unser grünes Rechteck. Und dort wird die statische Variable gespeichert.java.lang.Math.PIPIjava.lang.Mathjava.lang.MathPI

Blaues Rechteck:

Wenn die Java-Maschine den Code einer Klasse in den Speicher lädt, erstellt sie ein spezielles java.lang.ClassObjekt, das Informationen über die geladene Klasse speichert: ihren Namen, Methodennamen, Feldnamen und -typen usw.

Der Name „Klasse“ kann etwas verwirrend sein. Sinnvoller wäre es, sie ClassInfo zu nennen, da diese Klasse nur einige Informationen über die geladene Klasse speichert.

Sie können das Klassenobjekt für jeden Typ mit einem Befehl wie diesem abrufen:

Class name = ClassName.class;

Beispiele:

Code Notiz
Class a = String.class;
Holen Sie sich ein ClassObjekt mit Informationen über die StringKlasse
Class b = Object.class;
Holen Sie sich ein ClassObjekt mit Informationen über die ObjectKlasse
Class c = Integer.class;
Holen Sie sich ein ClassObjekt mit Informationen über die IntegerKlasse
Class d = int.class;
Holen Sie sich ein ClassObjekt mit Informationen zum intTyp
Class e = void.class;
Holen Sie sich ein ClassObjekt mit Informationen zum voidTyp

Sie können auch von jedem Objekt eine Referenz auf ein Klassenbeschreibungsobjekt erhalten, da jedes Objekt über die getClass()Methode verfügt, die es von der Klasse erbt Object.

Beispiele:

Code Notiz
Class a = "Hello".getClass();
Gleiches Objekt wieString.class
Class b = new Integer().getClass();
Gleiches Objekt wieInteger.class
Class c = Boolean.TRUE.getClass();
Gleiches Objekt wieBoolean.class