Die getClass()-Methode, das Class-Objekt und eine Einführung in Reflection – 1

„Hallo, Amigo!“

„Jetzt ist es Zeit für das Hauptereignis. Wir machen uns mit der Class-Klasse vertraut und gehen auf Reflection ein.
Wie Sie wahrscheinlich bereits erkannt haben, ist alles in Java ein Objekt. Und was braucht ein Objekt? Was hat jedes Objekt, das es definiert? worum geht es?"

"Eine Klasse!"

„Richtig! Gut gemacht. Jedes Objekt hat eine Klasse. Aber zurück zu den Objekten … Einige Objekte enthalten vollständig eine Entität, während andere lediglich bei der Verwaltung helfen.“

„Zu diesem letzteren Typ gehören FileOutputStream und Thread . Wenn Sie ein Thread- Objekt erstellen, wird kein neuer Thread erstellt. Der Thread wird von der Java Virtual Machine erstellt, nachdem die start()-Methode aufgerufen wurde. Dieses Objekt hilft lediglich bei der Verwaltung des Prozesses.“

„Das Gleiche gilt für FileOutputStream : Die Datei wird auf der Festplatte gespeichert und das Betriebssystem verwaltet Speicher und Zugriff. Wir können jedoch über Dateiobjekte mit ihr interagieren, wiederum mit Hilfe der Java Virtual Machine.“

„Ja, das verstehe ich schon.“

„Es gibt also eine spezielle Klasse namens Class für die Interaktion mit Klassen.“

„Das war nicht schwer zu erraten.“

„Ja. Jedes Mal, wenn die Java Virtual Machine eine neue Klasse in den Speicher lädt, erstellt sie ein Klassenobjekt, mit dem Sie spezifische Informationen über die geladene Klasse abrufen können.“

„Jede Klasse und jedes Objekt ist einem „ Klassenobjekt “ zugeordnet .“

Beispiel Beschreibung
Class clazz = Integer.class;
Ruft das Class-Objekt der Integer-Klasse ab.
Class clazz = int.class;
Ruft das Class-Objekt der int-Klasse ab.
Class clazz = "123".getClass();
Ruft das Class-Objekt eines String-Objekts ab.
Class clazz = new Object().getClass();
Ruft das Class-Objekt des Object-Objekts ab.

„Wow! Wie interessant!“

„Erinnern Sie sich, dass das Wort Klasse ein Schlüsselwort in Java ist und nicht als Variablenname verwendet werden kann?“

„Oh ja, ich weiß, ich weiß. Ich habe es nur vergessen.“

„Haben Sie das Class-Objekt schon irgendwo verwendet?“

„Ja, wir haben es verwendet, als wir unsere eigene Implementierung der Equals-Methode geschrieben haben.“

„Ja, Sie können die Methode getClass() verwenden, um zu testen, ob Objekte dieselbe Klasse haben.“

„Und was kann man mit diesem Objekt machen?“

„Na ja, viele Dinge:“

Java-Code Beschreibung
Class s = int.class;
String name = s.getName();
Ruft den Klassennamen ab.
Class s = Class.forName("java.lang.String");
Ruft eine Klasse nach Namen ab.
Object o1 = String.valueOf(1);
Object o2 = 123 + "T";
o1.getClass() == o2.getClass();
Vergleicht die Klassen von Objekten.

„Interessant, aber nicht so cool, wie ich dachte.“

„Möchtest du, dass es cool ist? Es gibt auch ReflectionReflection ist super cool.“

„Was ist Reflexion ?“

Reflexion ist die Fähigkeit einer Klasse, Informationen über sich selbst zu erhalten. Java verfügt über spezielle Klassen:  Field und Method , die der Class- Klasse für Klassen ähneln . So wie Class- Objekte es Ihnen ermöglichen, Informationen über eine Klasse zu erhalten, stellen Field-Objekte Informationen über ein Feld bereit , und das Method-Objekt stellt Informationen über eine Methode bereit. Und schauen Sie sich an, was Sie damit machen können:"

Java-Code Beschreibung
Class[] interfaces = List.class.getInterfaces();
Ruft eine Liste von Klassenobjekten für die Schnittstellen der List-Klasse ab
Class parent = String.class.getSuperclass();
Ruft das Class-Objekt der übergeordneten Klasse der String-Klasse ab
Method[] methods = List.class.getMethods();
Ruft eine Liste der Methoden der List-Klasse ab
String s = String.class.newInstance();
Erstellt einen neuen String
String s = String.class.newInstance();
Method m = String.class.getMethod("length");
int length = (int) m.invoke(s)
Ruft die Längenmethode der String-Klasse ab und ruft sie für die String s auf

„Wow! Das ist wirklich cool!“