Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung des Reflexionsmechanismus in Java

Detaillierte Erläuterung des Reflexionsmechanismus in Java

黄舟
黄舟Original
2017-10-16 10:19:261135Durchsuche

Dieser Artikel enthält hauptsächlich relevante Informationen zur detaillierten Erläuterung von Beispielen für den Java-Reflexionsmechanismus. Ich hoffe, dass dieser Artikel jedem helfen kann, den Reflexionsmechanismus zu verstehen und zu beherrschen.

Java Detaillierte Erläuterung von Beispielen für Reflexionsmechanismen

Vorwort

Heute werde ich den Reflexionsmechanismus von Java vorstellen, den wir früher verwendet haben Erhalten Sie eine Instanz einer Klasse. Das ist zu niedrig. Kommen Sie heute mit mir, um einen fortgeschritteneren Weg zu lernen, dies zu erreichen.

Text

Definition des Java-Reflexionsmechanismus

Der Java-Reflexionsmechanismus bedeutet, dass er im laufenden Zustand für jede Klasse bekannt sein kann Alle Eigenschaften und Methoden dieser Klasse; für jedes Objekt können alle seine Methoden und Eigenschaften aufgerufen werden; diese Funktion zum dynamischen Abrufen von Informationen und zum dynamischen Aufrufen der Methoden des Objekts wird als Reflexionsmechanismus der Java-Sprache bezeichnet. Um es in einem Satz zusammenzufassen: Durch Reflexion können die Eigenschaften und Methoden jeder Klasse zur Laufzeit realisiert werden.

Die Vor- und Nachteile des Reflexionsmechanismus

Warum den Reflexionsmechanismus verwenden? Reicht es nicht, Objekte direkt zu erstellen? Dazu gehören die Konzepte der dynamischen und statischen Kompilierung:

Bestimmen Sie den Typ zur Kompilierungszeit und binden Sie das Objekt, dh übergeben Sie es.

Dynamische Kompilierung

: Bestimmen Sie den Typ und binden Sie das Objekt zur Laufzeit. Die dynamische Kompilierung maximiert die Flexibilität von Java, verkörpert polymorphe Anwendungen und reduziert die Kopplung zwischen Klassen.

Vorteile

Es kann eine dynamische Erstellung von Objekten und Kompilierung realisieren, was insbesondere bei der Entwicklung von J2EE eine große Flexibilität darstellt. Die Leistung ist sehr offensichtlich. Beispielsweise ist es bei einer umfangreichen Software unmöglich, sie auf einmal perfekt zu entwerfen. Wenn sich herausstellt, dass bestimmte Funktionen aktualisiert werden müssen, können wir den Benutzer nicht auffordern, die vorherigen zu deinstallieren Wenn dies der Fall ist, wird diese Software definitiv nicht von vielen Menschen verwendet. Wenn es statisch ist, muss das gesamte Programm einmal neu kompiliert werden, um die Funktionsaktualisierung zu realisieren. Wenn es den Reflexionsmechanismus verwendet, muss es nicht deinstalliert werden, sondern muss nur zur Laufzeit dynamisch erstellt und kompiliert werden.

Nachteile


Wirkt sich auf die Leistung aus. Die Verwendung von Reflection ist im Grunde eine interpretierte Operation, bei der wir der JVM mitteilen können, was wir tun möchten und die unseren Anforderungen entspricht. Solche Vorgänge sind immer langsamer als die direkte Ausführung desselben Vorgangs.

Verstehen der Klassenklasse und des Klassentyps

Wenn Sie Reflexion verstehen möchten, verstehen Sie zunächst die Klasse Klasse, die die Grundlage für die Reflexionsimplementierung darstellt.

Eine Klasse ist ein Instanzobjekt der Klasse java.lang.Class, und eine Klasse ist eine Klasse aller Klassen (für gewöhnliche Objekte gibt es eine Klasse, die wir im Allgemeinen erstellen und darstellen). Sie sehen so aus:


Wie oben erwähnt, sind alle Klassen Objekte der Klasse. Wie kann man das also folgendermaßen ausdrücken:

Code code1 = new Code();


Aber wenn wir uns den Quellcode von Class ansehen, ist er so geschrieben:

Class c = new Class();


Sie können sehen, dass der Konstruktor privat ist. Nur die JVM kann ein neues Klassenobjekt wie eine normale Klasse erstellen. Obwohl wir kein neues Klassenobjekt erstellen können, können wir ein Klassenobjekt über eine vorhandene Klasse abrufen . Es gibt drei Möglichkeiten:

private Class(ClassLoader loader) { 
classLoader = loader; 
}


Dies zeigt, dass jede Klasse eine implizite statische Mitgliedsvariablenklasse hat, die durch Abrufen der statischen Mitgliedsvariablenklasse erhalten wird der Klasse

Class c1 = Code.class;



code1 ist ein Objekt von Code, das über die getClass()-Methode eines Klassenobjekts erhalten wird

Class c2 = code1.getClass();



Diese Methode besteht darin, dass die Class-Klasse die forName-Methode aufruft, die über den vollständig qualifizierten Namen einer Klasse abgerufen wird. Hier sind c1, c2 und c3 alle Objekte von Klasse Sie sind genau gleich, und es gibt einen wissenschaftlichen Namen namens Code-Klassentyp. Das ist seltsam. Haben wir nicht gesagt, dass Code ein Objekt der Klasse ist und c1, c2 und c3 auch Objekte der Klasse sind, also ist Code nicht dasselbe wie c1, c2 und c3? Warum heißt es auch Code und um welche Art von Klasse handelt es sich? Lassen Sie sich hier nicht darauf ein, ob sie gleich sind, sondern verstehen Sie einfach, was der Klassentyp bewirkt. Wie der Name schon sagt, ist der Klassentyp der Typ der Klasse, das heißt, er beschreibt, was eine Klasse ist und was sie enthält , sodass wir eine Klasse anhand des Klassentyps kennen können. Die Eigenschaften und Methoden einer Klasse können aufgerufen werden, und dies ist die Grundlage der Reflexion.

Class c3 = Class.forName(“com.trigl.reflect.Code”);
Ein einfacher Beispielcode:


Ausführungsergebnis:

public class ReflectDemo { 
public static void main(String[] args) throws ClassNotFoundException { 
//第一种:Class c1 = Code.class; 
Class class1=ReflectDemo.class; 
System.out.println(class1.getName());

  //第二种:Class c2 = code1.getClass();
  ReflectDemo demo2= new ReflectDemo();
  Class c2 = demo2.getClass();
  System.out.println(c2.getName());

  //第三种:Class c3 = Class.forName("com.trigl.reflect.Code");
  Class class3 = Class.forName("com.tengj.reflect.ReflectDemo");
  System.out.println(class3.getName());
}
}


Vorgänge im Zusammenhang mit der Java-Reflexion
com.tengj.reflect.ReflectDemo 
com.tengj.reflect.ReflectDemo 
com.tengj.reflect.ReflectDemo

Wir wussten schon früher, wie wir eine Klasse erhalten. Was können wir also mit dieser Klasse machen?

Die Zusammenfassung lautet wie folgt:

Holen Sie sich die Mitgliedsmethode Methode

Holen Sie sich die Mitgliedsvariable Feld

Holen Sie sich den Konstruktor Konstruktor



Im Folgenden wird es im Detail vorgestellt

Informationen zur Mitgliedsmethode abrufen

Das individuelle Abrufen einer bestimmten Methode erfolgt über die folgende Methode der Class-Klasse:

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Reflexionsmechanismus in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn