Nichts wird typisiert Class
. Jeder Object
in Java gehört zu einem bestimmten class
. Deshalb definiert die Object
Klasse, die von allen anderen Klassen geerbt wird, die getClass()
Methode.
getClass()
oder das Klassenliteral - Foo.class
Geben Sie ein Class
Objekt zurück, das einige Metadaten zur Klasse enthält:
- Name
- Paket
- Methoden
- Felder
- Konstruktoren
- Anmerkungen
und einige nützliche Methoden wie Gießen und verschiedene Prüfungen ( isAbstract()
, isPrimitive()
usw.). Das Javadoc zeigt genau, welche Informationen Sie über eine Klasse erhalten können.
Wenn beispielsweise einer Ihrer Methoden ein Objekt zugewiesen wurde und Sie es verarbeiten möchten, falls es mit der @Processable
Anmerkung versehen ist, gilt Folgendes :
public void process(Object obj) {
if (obj.getClass().isAnnotationPresent(Processable.class)) {
}
}
In diesem Beispiel erhalten Sie die Metadaten zur Klasse des angegebenen Objekts (was auch immer es ist) und prüfen, ob es eine bestimmte Anmerkung enthält. Viele der Methoden in einer Class
Instanz werden als "Reflexionsoperationen" oder einfach als "Reflexion" bezeichnet. Lesen Sie hier mehr über Reflexion, warum und wann sie verwendet wird.
Beachten Sie auch, dass das Class
Objekt Aufzählungen und Schnittstellen zusammen mit Klassen in einer laufenden Java-Anwendung darstellt und über die entsprechenden Metadaten verfügt.
Zusammenfassend lässt sich sagen, dass jedes Objekt in Java eine Klasse hat (zu dieser gehört) und über ein entsprechendes Class
Objekt verfügt, das Metadaten darüber enthält, auf die zur Laufzeit zugegriffen werden kann.
Class
Klasse erbt von sichObject
selbst.Class.class
Gibt einClass
Objekt zurück, das dieClass
Klasse darstellt. Sie können über Reflexion nachdenken. MEIN KOPF ASPLODE.Ein Klassenobjekt ist eine Art Metaobjekt, das die Klasse eines Objekts beschreibt. Es wird hauptsächlich mit den Reflexionsfunktionen von Java verwendet. Sie können es sich wie eine "Blaupause" der tatsächlichen Klasse vorstellen. ZB hast du ein Klasse Auto wie dieses:
public class Car { public String brand; }
Sie können dann ein Klassenobjekt erstellen, das Ihre "Auto" -Klasse beschreibt.
Class myCarClass = Class.forName("Car");
Jetzt können Sie alle Arten von Abfragen für Ihre Auto-Klasse für dieses Klassenobjekt durchführen:
myCarClass.getName() - returns "Car" myCarClass.getDeclaredField("brand") - returns a Field object describing the "brand" field
und so weiter. Jedes Java-Objekt verfügt über eine Methode getClass (), die das Class-Objekt zurückgibt, das die Klasse des Java-Objekts beschreibt. Sie könnten also so etwas tun:
Car myCar = new Car(); Class myCarClass = myCar.getClass();
Dies funktioniert auch für Objekte, die Sie nicht kennen, z. B. Objekte, die Sie von außen erhalten:
public void tellMeWhatThisObjectsClassIs(Object obj) { System.out.println(obj.getClass().getName()); }
Sie können diese Methode mit jedem Java-Objekt füttern und es wird die tatsächliche Klasse des Objekts gedruckt, das Sie ihm gegeben haben.
Wenn Sie mit Java arbeiten, müssen Sie sich die meiste Zeit nicht um Klassenobjekte kümmern. Sie haben jedoch einige praktische Anwendungsfälle. Mit ihnen können Sie beispielsweise Objekte einer bestimmten Klasse programmgesteuert instanziieren, was häufig für die Serialisierung und Deserialisierung von Objekten verwendet wird (z. B. das Hin- und Herkonvertieren von Java-Objekten in / von XML oder JSON).
Class myCarClass = Class.forName("Car"); Car myCar = myCarClass.newInstance(); // is roughly equivalent to = new Car();
Sie können es auch verwenden, um alle deklarierten Felder oder Methoden Ihrer Klasse usw. herauszufinden, was in bestimmten Fällen sehr nützlich ist. Wenn Ihre Methode beispielsweise ein unbekanntes Objekt erhält und Sie mehr darüber wissen müssen, z. B. wenn es eine Schnittstelle usw. implementiert, ist die Klassenklasse hier Ihr Freund.
Kurz gesagt, mit den Klassen Class, Field, Method usw. im Paket java.lang.reflect können Sie Ihre definierten Klassen, Methoden und Felder analysieren, neue Instanzen davon erstellen und Methoden aller Art aufrufen und sie ermöglichen es Ihnen, dies zur Laufzeit dynamisch zu tun.
quelle
getClass()
ist eine Methode, die ein Objekt zurückgibt , das eine Instanz vonjava.lang.Class
... ist. Es ist kein Casting beteiligt. Casting würde so aussehen:quelle
Ich möchte auch zu ColinDs Antwort hinzufügen, dass getClass dasselbe Objekt für Instanzen desselben Typs zurückgibt . Dies wird wahr gedruckt :
MyOtherClass foo = new MyOtherClass(); MyOtherClass bar = new MyOtherClass(); System.out.println(foo.getClass()==bar.getClass());
Beachten Sie, dass dies nicht der Fall ist
equals
, den ich verwende==
.quelle
Ein Class-Objekt ist eine Instanz von Class (java.lang.Class). Das folgende Zitat aus dem Javadoc der Klasse sollte Ihre Frage beantworten
quelle
Um das Klassenobjekt vollständig zu verstehen, lassen Sie uns zurückgehen und verstehen, dass wir das Klassenobjekt überhaupt erhalten. Sie sehen, jede
.java
Datei, die Sie erstellen, wenn Sie diese.java
Datei kompilieren, erstellt die JVM eine.class
Datei. Diese Datei enthält alle Informationen über die Klasse, nämlich:Die Liste, die Sie oben sehen, ist die, die Sie normalerweise in einer typischen Klasse sehen. Bis zu diesem Punkt befinden sich Ihre
.java
Datei und Ihre Datei.class
auf Ihrer Festplatte. Wenn Sie tatsächlich die Klasse verwenden müssen, dh Code in dermain()
Methode ausführen , verwendet die JVM diese.class
Datei auf Ihrer Festplatte und lädt sie in einen von 5 Speichern Bereiche in jvm, dem Methodenbereich, unmittelbar nach dem Laden der.class
Datei in den Methodenbereich verwendet der jvm diese Informationen und ein Klassenobjekt, das die im Heapspeicherbereich vorhandene Klasse darstellt .Hier ist die Ansicht der obersten Ebene:
.java
--compile ->.class
-> wenn Sie Ihr Skript ausführen ->.class
wird in den Methodenbereich geladen --jvm erstellt ein Klassenobjekt aus dem Methodenbereich -> ein Klassenobjekt wird geborenMit einem Klassenobjekt erhalten Sie Informationen wie Klassennamen und Methodennamen, alles über die Klasse.
Beachten Sie außerdem, dass für jede Klasse, die Sie im Skript verwenden, nur ein Klassenobjekt vorhanden sein darf.
Hoffe das macht Sinn
quelle
Die Object-Klasse ist standardmäßig die übergeordnete Klasse aller Klassen in Java. Mit anderen Worten, es ist die oberste Klasse von Java.
Die Object-Klasse ist nützlich, wenn Sie auf ein Objekt verweisen möchten, dessen Typ Sie nicht kennen. Beachten Sie, dass die Referenzvariable der übergeordneten Klasse auf das untergeordnete Klassenobjekt verweisen kann, das als Upcasting bezeichnet wird.
Nehmen wir ein Beispiel: Es gibt eine getObject () -Methode, die ein Objekt zurückgibt. Sie kann jedoch von einem beliebigen Typ wie Employee, Student usw. sein. Wir können die Objektklassenreferenz verwenden, um auf dieses Objekt zu verweisen. Zum Beispiel:
Object obj=getObject()
; // Wir wissen nicht, welches Objekt von dieser Methode zurückgegeben wirdquelle