Was ist Reflexionstechnologie?
Erhalten Sie dynamisch die angegebene Klasse und den Inhalt (Mitglieder) in der Klasse und führen Sie deren Inhalt aus. Die Anwendung läuft bereits und wenn das neue Objekt darin nicht erstellt werden kann, kann das Objekt nicht verwendet werden. Zu diesem Zeitpunkt können Sie die entsprechende Bytecode-Datei entsprechend dem vollständigen Klassennamen der Konfigurationsdatei finden, in den Speicher laden und eine Objektinstanz dieser Klasse erstellen. Dies erfordert die Verwendung der Reflexionstechnologie. Um zu verhindern, dass die Außenwelt auf einige Eigenschaften und Methoden zugreift, werden diese normalerweise auf „privat“ gesetzt. Zu diesem Zeitpunkt können wir den Komfort von Java Reflection nutzen, um auf Folgendes zuzugreifen private Eigenschaften der Klasse. Eigenschaften und Methoden:
/**Person类****/package com.qiu;public class Person { private String name; private static Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } public String toString1() { return "Person [name=" + name + ", age=" + age + "]"; } public String demo(String de) { return de; } }
package com.qiu;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/** * 测试类 * @author qiu * */public class Test { public static void main(String[] args) throws Exception { //加载Person.class文件进内存 Class clazz = Class.forName("com.qiu.Person"); //获取该类指定的属性age getDeclaredField----> 获取所有属性,包括私有 Field field = clazz.getDeclaredField("age"); //获取该类指定的属性name Field field2 = clazz.getDeclaredField("name"); //通过clazz实列化对象 Object obj = clazz.newInstance(); //暴力访问。如果不设置默认为false是访问不到私有属性的。 field.setAccessible(true); //暴力访问。 field2.setAccessible(true); //初始化属性值 field.set(obj, 123); field2.set(obj, "李白"); //获取该字段的值。 Object o = field.get(obj); Object o1 = field2.get(obj); System.out.println(o); System.out.println(o1); /*** 通过更简洁的方法获取指定方法 **/ Method method = clazz.getMethod("getAge", null); System.out.println(method.invoke(obj, null)); /******** 通过反射获取带参数的方法 ******************************/ Class clazz2 = Class.forName("com.qiu.Person"); Method method41 = clazz2.getMethod("demo",String.class); Object obj3 = clazz.newInstance(); System.out.println(method41.invoke(obj3, "邱某")); } }
123
Li Bai
123
Qiu
Verwandte Artikel:
Java-Reflexion, die häufig in der Arbeit verwendet wird
Das obige ist der detaillierte Inhalt vonWas ist Reflexionstechnologie? Die am häufigsten verwendeten Beispiele für Reflexionstechnologie in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!