Inhaltsverzeichnis
Definition
Das Klassenobjekt abrufen
1.1 Das Klassenobjekt über den Klassennamen abrufen
1.2 Abrufen von Klassenobjekten über Objekte
1.3 Klassenobjekt über Klassenliteralkonstante abrufen
Klasseninformationen abrufen
2.1 Alle Felder abrufen
2.2 Das angegebene Feld abrufen
2.3 Alle deklarierten Felder abrufen
2.4 Erhalten Sie die angegebenen Deklarationsfelder
Betreiben von Klassen und Objekten
3.1 Objekte erstellen
3.2 Auf Eigenschaften zugreifen
Anwendungsszenarien der Reflexion
4.1 Abhängigkeitsinjektion
4.2 Parsen von Konfigurationsdateien
4.3 Dynamischer Proxy
Vor- und Nachteile der Reflexion
Heim Java javaLernprogramm So definieren und verwenden Sie Java Reflection

So definieren und verwenden Sie Java Reflection

May 22, 2023 pm 07:35 PM
java

    Definition

    Die Fähigkeit, Elemente wie Klassen, Methoden, Eigenschaften usw. dynamisch abzurufen und zu bearbeiten, während ein Java-Programm ausgeführt wird, wird als Java-Reflektion bezeichnet. Es ermöglicht uns, Informationen über eine Klasse zu erhalten und diese zu bearbeiten, während das Programm ausgeführt wird, was die Flexibilität und Skalierbarkeit der Java-Sprache erheblich erweitert.

    In Java verfügt jede Klasse über ein entsprechendes Klassenobjekt, und die Reflexion verwendet dieses Klassenobjekt, um Klasseninformationen abzurufen und zu verarbeiten.

    Das Klassenobjekt abrufen

    In Java gibt es drei Möglichkeiten, das Klassenobjekt abzurufen:

    1.1 Das Klassenobjekt über den Klassennamen abrufen

    Dies ist die gebräuchlichste Methode. Verwenden Sie dazu die Methode Class.forName() Holen Sie sich das Klassenobjekt. Zum Beispiel:

    Class<?> clazz = Class.forName("com.example.MyClass");
    Nach dem Login kopieren

    1.2 Abrufen von Klassenobjekten über Objekte

    Sie können das Klassenobjekt, zu dem es gehört, über die Methode getClass() des Objekts abrufen. Zum Beispiel:

    MyClass obj = new MyClass();
    Class<?> clazz = obj.getClass();
    Nach dem Login kopieren

    1.3 Klassenobjekt über Klassenliteralkonstante abrufen

    Verwenden Sie die Klassenliteralkonstante, um Klassenobjekte abzurufen, zum Beispiel:

    Class<?> clazz = MyClass.class;
    Nach dem Login kopieren

    Klasseninformationen abrufen

    Durch Abrufen des Klassenobjekts können wir verschiedene Informationen über die Klasse erhalten. wie Klassenname, geerbte Klasse, implementierte Schnittstelle, Konstruktor, Methoden und Felder usw. Das Folgende ist ein Beispiel für das Abrufen der Felder einer Klasse.

    2.1 Alle Felder abrufen

    Sie können alle öffentlichen geänderten Felder über die getFields()-Methode des Klassenobjekts abrufen, zum Beispiel:

    Field[] fields = clazz.getFields();
    for (Field field : fields) {
        System.out.println(field.getName());
    }
    Nach dem Login kopieren

    2.2 Das angegebene Feld abrufen

    Sie können die öffentliche Änderung des angegebenen Namens über abrufen die getField()-Methode der Klassenobjektfelder, zum Beispiel:

    Field field = clazz.getField("name");
    System.out.println(field.getName());
    Nach dem Login kopieren

    2.3 Alle deklarierten Felder abrufen

    Sie können alle deklarierten Felder über die getDeclaredFields()-Methode des Klassenobjekts abrufen, einschließlich öffentlicher, geschützter und privater geänderter Felder. zum Beispiel:

    Field[] fields = clazz.getDeclaredFields();
    for (Field field : fields) {
        System.out.println(field.getName());
    }
    Nach dem Login kopieren

    2.4 Erhalten Sie die angegebenen Deklarationsfelder

    Sie können die deklarierten Felder mit dem angegebenen Namen über die Methode getDeclaredField() des Klassenobjekts abrufen, einschließlich der durch öffentliche, geschützte und private geänderten Felder, zum Beispiel:

    Field field = clazz.getDeclaredField("name");
    System.out.println(field.getName());
    Nach dem Login kopieren

    Betreiben von Klassen und Objekten

    Sobald wir die Klasseninformationen erhalten haben, können wir Reflektion verwenden, um Klassen und Objekte zu manipulieren, z. B. Objekte zu erstellen, Methoden aufzurufen und auf Eigenschaften zuzugreifen. Im Folgenden finden Sie ein Beispiel für die Erstellung von Objekten und den Zugriff auf Eigenschaften.

    3.1 Objekte erstellen

    Sie können Objekte über die newInstance()-Methode des Klassenobjekts erstellen, zum Beispiel:

    MyClass obj = (MyClass) clazz.newInstance();
    Nach dem Login kopieren

    3.2 Auf Eigenschaften zugreifen

    Sie können durch Reflektion auf die Eigenschaften des Objekts zugreifen, einschließlich des Abrufens und Festlegens von Eigenschaftswerten . Beispiel:

    Field field = clazz.getDeclaredField("name");
    field.setAccessible(true);
    field.set(obj, "张三");
    String name = (String) field.get(obj);
    Nach dem Login kopieren

    Der obige Code ruft zuerst das Namensattribut der Klasse ab und legt es so fest, dass darauf zugegriffen werden kann, setzt dann den Attributwert durch Reflektion auf „Zhang San“ und ruft schließlich den Attributwert ab und weist ihn der Namensvariablen zu .

    Anwendungsszenarien der Reflexion

    Reflektion wird häufig in Java verwendet:

    4.1 Abhängigkeitsinjektion

    Abhängigkeitsinjektion ist eine Methode zum dynamischen Einfügen von Abhängigkeiten in eine Klasse durch Reflexion. Beispielsweise wird die Abhängigkeitsinjektion im Spring-Framework durch Reflektion implementiert.

    4.2 Parsen von Konfigurationsdateien

    In Java können Konfigurationsdateien wie XML und JSON durch Reflektion analysiert und die Daten in der Konfigurationsdatei in Java-Objekte konvertiert werden.

    4.3 Dynamischer Proxy

    Dynamischer Proxy ist eine Methode zum Generieren von Proxy-Klassen durch Reflektion. Dynamische Proxys ermöglichen die Generierung von Proxy-Objekten zur Laufzeit, um Zielobjekte zu erweitern oder abzufangen.

    Vor- und Nachteile der Reflexion

    Die Flexibilität und Skalierbarkeit von Java kann durch dynamisches Abrufen und Bearbeiten von Klasseninformationen zur Laufzeit erreicht werden, was den Vorteil der Reflexion darstellt. Reflection kann einige Funktionen realisieren, die mit herkömmlichen Methoden nicht erreicht werden können, z. B. dynamischer Proxy, Abhängigkeitsinjektion usw.

    Aufgrund der Notwendigkeit, Klasseninformationen zur Laufzeit dynamisch abzurufen und zu verarbeiten, ist die Leistung von Reflexionsoperationen normalerweise schlechter als die direkte Operation von Klassen, was einen Mangel an Reflexion darstellt. Die Verwendung von Reflektion verringert die Lesbarkeit des Codes, da Code, der die Methoden eines Objekts aufruft oder auf Eigenschaften zugreift, normalerweise einfacher und klarer ist als Code, der Reflektion verwendet.

    Das obige ist der detaillierte Inhalt vonSo definieren und verwenden Sie Java Reflection. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Erklärung dieser Website
    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

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    AI Hentai Generator

    AI Hentai Generator

    Erstellen Sie kostenlos Ai Hentai.

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

    Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

    Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

    Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

    Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

    Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

    Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

    In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

    Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

    Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

    Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

    Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

    Java -Programm, um das Kapselvolumen zu finden Java -Programm, um das Kapselvolumen zu finden Feb 07, 2025 am 11:37 AM

    Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

    Wie führe ich Ihre erste Spring -Boot -Anwendung in der Spring Tool Suite aus? Wie führe ich Ihre erste Spring -Boot -Anwendung in der Spring Tool Suite aus? Feb 07, 2025 pm 12:11 PM

    Spring Boot vereinfacht die Schaffung robuster, skalierbarer und produktionsbereiteter Java-Anwendungen, wodurch die Java-Entwicklung revolutioniert wird. Der Ansatz "Übereinkommen über Konfiguration", der dem Feder -Ökosystem inhärent ist, minimiert das manuelle Setup, Allo

    See all articles