Maison  >  Article  >  Java  >  Qu'est-ce que la technologie de réflexion ? Les exemples de technologies de réflexion les plus couramment utilisés en Java

Qu'est-ce que la technologie de réflexion ? Les exemples de technologies de réflexion les plus couramment utilisés en Java

php是最好的语言
php是最好的语言original
2018-08-04 13:58:391124parcourir

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 :

La technologie de réflexion la plus couramment utilisée

/**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, "邱某"));

    }
}

Les résultats d'impression sont les suivants :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn