Wenn das Java -Programm ausgeführt wird, hat das Java -System die Identifizierung aller Objekte, die sogenannte RTTI, die Identifizierung aller Objekte, die sogenannte RTTI, immer durchgeführt. Diese Information zeichnet die Klasse jedes Objekts auf. Die virtuelle Maschine verwendet normalerweise die korrekte Methode zum Ausführen der Typinformationen. Die Klasse Klasse umfasst den Status eines Objekts und einer Schnittstelle.
Die einfache Zusammenfassung lautet wie folgt:
Die Klassenklasse ist auch eine Klasse, aber der Name ähnelt dem des Keywords der Klasse. Java ist eine sensible Sprache.
Der Inhalt der Klassenklasse ist die Typinformationen der Klasse, die Sie erstellt haben.
Objekte der Klassenklasse können nicht wie eine gewöhnliche Klasse auf neue Form () erstellt werden.
Die Rolle der Klassenklasse besteht darin, während der Laufzeit ein bestimmtes Objekt bereitzustellen oder zu erhalten, das ein bestimmtes Objekt bereitstellt oder erhalten oder die Funktion der TypeID () in C ++ ähnelt. Diese Informationen können auch zur Reflexion verwendet werden.
1. Klassenklassenprinzip
Wir alle wissen, dass alle Java -Klassen die Objektklasse erben. Klassenklasse. Wir können kein Klassenobjekt generieren (der Konstruktor ist privat), und das Objekt dieser Klassenklasse besteht darin, das Klassenobjekt automatisch von der java -virtuellen Maschine zu erstellen, wenn es übertragen wird, oder es wird von der definitiven Methode im Lader generiert. Die von uns generierten Objekte haben ein Feld, um den Speicherort des Objekts des Objekts in der Klassenklasse des Objekts aufzuzeichnen. Wie in der Abbildung unten gezeigt:
2. Holen Sie sich ein Klassenobjekt
Die erste Methode ist die Forname -Funktion der Klassenklasse
[Codec -Klasse Formen {}
Klasse obj = class.Forname ("formes");
Die zweite Methode besteht darin, das Objekt des Objekts des Objekts zu verwenden
Kopieren Sie den Code -Code wie folgt: Klasse Formen {}
forces s1 = new forces ();
Klasse obj = s1.getClass ();
Klasse OBJ1 = S1.getSuperClass ();
Die dritte Methode besteht darin, die Art der Typkonstante zu verwenden
Code Code wie folgt kopieren: obj = string.class;
Klasse obj1 = int.Class;
Beachten Sie, dass JVM bei Verwendung dieser Methode zum Generieren des Klassenklassenobjekts die Klasse (z. B. Zeichenfolge) nicht automatisch lädt. Andere Methoden lassen JVM diese Klasse initialisieren.
3.. Verwenden Sie das Objekt der Klassenklasse, um eine Instanz der Zielklasse zu generieren
Ungenaue Objektinstanz
Nachdem Sie ein Objekt der Klassenklasse erhalten haben, können Sie die Funktion von NewInstance () verwenden, um eine Instanz der Zielklasse zu generieren. Diese Funktion generiert jedoch nicht direkt Instanzen der Zielklasse und kann nur Instanzen der Objektklasse generieren
Code Code wie folgt kopieren: obj = class.forname ("formes");
Objekt formSinstance = obj.newinstance ();
Verwenden Sie die Generalisierungsklasse, um die Zielinstanz des Typs Gürteltyp zu verweisen
Code Code wie folgt kopieren: formes> obj = formes.class;
formt NewShape = obj.newinstance ();
Aufgrund der Typbegrenzung kann der Objektverweis auf die Generalisierungsklassensyntax nicht in andere Kategorien gerichtet werden.
Code Code wie folgt kopieren: Klasse obj1 = int.class;
Klasse <Integer> obj2 = int.Class;
obj1 = double.class;
//Obj2=double.class;
Es gibt jedoch eine flexible Verwendung, mit der Sie auf jede Unterklasse der Basisklasse mit Klassenobjekten verweisen können.
COPE CODE CODE wie folgt: Klasse <?
obj = number.class;
obj = double.class;
Daher kann das unten generierte Klassenobjekt auf jede Klasse verweisen.
Code Code wie folgt kopieren: Klasse <?> Obj = int.class;
obj = double.class;
obj = formes.class;
Die letzte seltsame Verwendung ist, dass Sie, wenn Sie diese generische Syntax verwenden, um ein Basisklassenobjekt eines Objekts einer Klassenklasse zu erstellen, die Sie zur Hand haben, die folgende spezielle Grammatik verwenden müssen
Kopieren Sie den Code -Code wie folgt: öffentliche Klasse Formen {}
Die Klasse Runde erweitert die Formen {}
Klasse <Rand> rclass = rund.class;
Klasse <?
// class <Phapes> sclass = rclass.getSuperClass ();
Wir wissen, dass die Basisklasse von Runden Formen ist, aber die Klasse <Sapes> nicht direkt deklarieren kann und muss eine spezielle Grammatik verwenden
Klasse <?
Das obige ist der gesamte Inhalt dieses Artikels.