Qu'est-ce que la technologie de réflexion ?
Obtenez dynamiquement la classe spécifiée et le contenu (membres) de la classe, et exécutez son contenu. L'application est déjà en cours d'exécution et si le nouvel objet ne peut pas y être créé, l'objet ne peut pas être utilisé. À ce stade, vous pouvez trouver le fichier de bytecode correspondant en fonction du nom de classe complet du fichier de configuration, le charger en mémoire et créer une instance d'objet de cette classe. Cela nécessite l'utilisation de la technologie de réflexion, et dans une classe, afin d'empêcher le monde extérieur d'accéder à certaines propriétés et méthodes, elles sont généralement définies sur privées. À ce stade, nous pouvons utiliser la commodité apportée par la réflexion Java pour accéder au. propriétés privées de la classe. Propriétés et méthodes :
/**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
Articles connexes :
Réflexion Java couramment utilisée dans le travail
Mécanisme de réflexion en Java
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!