Dieser Artikel beschreibt die Verwendung des Java -Programmiermechanismus. Teilen Sie es für Ihre Referenz wie folgt weiter:
Vorwort: Reflexion: Erhalten Sie die Klasse (Bytecode -Datei wie Person.Class in diesem Artikel) dynamisch und führen Sie ihre Mitglieder aus. Die Reflexion kann bei der Entwicklung der Android -Anwendungsschicht etwas weniger auftreten, aber für diejenigen, die durch die zugrunde liegende Schicht kommen möchten, müssen sie sie mit sich bringen.
Entitätsklasse
Person.java
Paket com.sunwenou.reflect; // Paketname öffentliche Klasse Person {private Zeichenfolge Name; privates int Alter; public person () {// no parameter} public person (String name, int age) {// mit Parameter Super (); this.name = name; this.age = Alter; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } public int getage () {return ay; } public void setage (int age) {this.age = älter; } @Override public String toString () {return name+","+älter; } public void show () {// leer parameter system.out.println ("show"); } public void Fun (String SS) {// mit Parameter system.out.println (ss); } public static void function () {// statisches System.out.println ("static"); }}Methoden, um Bytecode -Dateien dynamisch zu erhalten
Um den Blog -Beitrag präzise aussehen zu lassen, wird eine Ausnahme ausgelöst und der Import weggelassen, das gleiche unten.
Paket com.sunwenou.reflect; öffentliche Klasse Demo1 { /*** Methode zum dynamischen Erhalt von Bytecode -Dateien* 1: Verwenden Sie die Klasse GETCLASS (), die durch die Objektklasse bereitgestellt wird String wird benötigt, der aus dem Paketnamen + Klassenname*/public static void main (String [] args) besteht aus der Ausnahme {// getclaz (); // GetCalz2 (); getClaz3 (); } // Verwenden Sie die von der Klasse veröffentlichte Methode forname (), die von der Klasse veröffentlicht wird. Class <?> Claz2 = class.forname ("com.sunwenou.reflect.person"); System.out.println (claz == claz2); } // Jeder Datentyp hat ein statisches Klassenattribut public static void getCalz2 () {class <Person> p1 = Person.class; Klasse <Person> p2 = person.class; System.out.println (p1 == p2); } // Verwenden Sie die Klasse getClass () -Methode, die von der Objektklasse public static void getClaz () {Person person1 = new Person () bereitgestellt wird; Klasse <? erweitert Person> claz = person1.getClass (); // Person.Class Person Person2 = new Person (); Klasse <? erweitert Person> claz2 = Person2.getClass (); // Person.class System.out.println (Claz == Claz2); }}Dynamisch die Klasse erhalten und das Objekt erstellen
Paket com.sunwenou.reflect; öffentliche Klasse Demo2 {public static void main (String [] args) löst eine Ausnahme aus {// createObj (); createObj2 (); } public static void createObj2 () löst Ausnahme aus {// Person Person = New Person ("Lisi", 23); // Erhalten Sie die Bytecode -Dateiobjektklasse <?> Claz = class.forname ("com.sunwenou.reflect.person"); //Person.class // das Objekt des Typs Konstruktor abrufen, zu dem die Konstruktormethode mit Parametern gehört. Constructor Constructor = Claz.getConstructor (String.Class, int.Class); // Erstellen Sie das Objekt mit der Methode zum Erstellen eines Objekts, das von der Konstruktorklasse Person Person = (Person) Constructor.Newinstance ("Lisi", 23) bereitgestellt wird. System.out.println (Person); } public static void createObj () löst Ausnahme aus {// Person Person = new Person (); // Erhalten Sie die Bytecode -Dateiobjektklasse <?> Claz = class.forname ("com.sunwenou.reflect.person"); Objekt obj = claz.newinstance (); // Verwenden Sie standardmäßig den Konstruktor leerer Parameter, um das Objektsystem zu erstellen. }}Dynamisch die Klasse erhalten und den Mitgliedsvariablen Werte zuweisen
Paket com.sunwenou.reflect; öffentliche Klasse Demo3 {public static void main (String [] args) löst eine Ausnahme aus {// Person p = new Person (); //p.name = "lisi"; // Erhalten Sie die Bytecode -Dateiobjektklasse <?> claz = class.forname ("com.sunwenou.reflect.person"); // Erhalten Sie das Objekt des Feldtyps, zu dem die Mitgliedsvariable gehört // field field = claz.getfield ("name"); // das Mitglied mit öffentlichem Erlaubnis Feld finden = claz.getDeclaredfield ("Name"); // Erhalten Sie alle deklarierten Fields Systems.out.println (Feld); // nicht statische Mitgliedsvariablen sind Objekt abhängig vom Objekt obj = claz.newinstance (); field.setAccessible (true); // Brute Force Cracking, auf zugängliches Feld eingestellt.set (OBJ, "Zhang San"); System.out.println (OBJ); }}Dynamisch die Klasse erhalten und die Methode ausführen
Paket com.sunwenou.reflect; öffentliche Klasse Demo4 {public static void main (String [] args) löst eine Ausnahme aus {// method1 (); Methode2 (); method3 (); } public static void method3 () löst Ausnahme aus {// Die Bytecode -Dateiobjektklasse <?> claz = class.forname ("com.sunwenou.reflect.person"); Methode M = Claz.getMethod ("Funktion", null); m.invoke (null, null); } //// Die Methode mit den Parametern public static void method2 () löst Ausnahme aus {// Die Bytecode -Dateiobjektklasse <?> Claz = class.forname ("com.sunwenou.reflect.person"); Methode M = Claz.getMethod ("Fun", String.class); Objekt obj = claz.newinstance (); m.invoke (obj, "Hallo"); } // Die Methode ohne Parameter ausführen public static void methode1 () löst Ausnahme aus {// Person Person = new Person (); Person.show (); // Erhalten Sie die Bytecode -Dateiobjektklasse <?> Claz = class.forname ("com.sunwenou.reflect.person"); // Erhalten Sie das Bytecode -Dateiobjekt, zu dem die ausgeführte Methode gehört. Methode M = Claz.getMethod ("show", null); // Nichtstatische Methoden sind Objekt abhängig vom Objekt obj = claz.newinstance (); // Methode M.Invoke (OBJ, NULL) ausführen; }}Dies ist die grundlegende Verwendung der Reflexion. Wir können Objekte über die Bytecode -Datei des Objekts erstellen, wenn wir keine Objekte normal erstellen und diese ausführen können. Hast du gelernt, wie es geht? ?
For more information about Java related content, please check out the topics of this site: "Introduction and Advanced Tutorial on Java Object-Oriented Programming", "Tutorial on Java Data Structure and Algorithm", "Summary of Java Operation DOM Node Skills", "Summary of Java File and Directory Operation Skills" and "Summary of Java Cache Operation Skills"
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.