Función de objeto Reflection_Class

Obtener funciones:

1. 获取成员变量们
			* Field[] getFields() :获取所有public修饰的成员变量
			* Field getField(String name)   获取指定名称的 public修饰的成员变量

			* Field[] getDeclaredFields()  获取所有的成员变量,不考虑修饰符
			* Field getDeclaredField(String name)  
		2. 获取构造方法们
			* Constructor<?>[] getConstructors()  
			* Constructor<T> getConstructor(类<?>... parameterTypes)  

			* Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)  
			* Constructor<?>[] getDeclaredConstructors()  
		3. 获取成员方法们:
			* Method[] getMethods()  
			* Method getMethod(String name, 类<?>... parameterTypes)  

			* Method[] getDeclaredMethods()  
			* Method getDeclaredMethod(String name, 类<?>... parameterTypes)  

		4. 获取全类名	
			* String getName()  

Campo:
operación de variable miembro :

		1. 设置值
			* void set(Object obj, Object value)  
		2. 获取值
			* get(Object obj) 

		3. 忽略访问权限修饰符的安全检查
			* setAccessible(true):暴力反射

Ejemplo:
crear una persona de clase simple

public class Person {
    
    
    private String name;
    private int age;
    public String a;
    protected String b;
    String c;
    private String d;

    public Person() {
    
    
    }

    @Override
    public String toString() {
    
    
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", a='" + a + '\'' +
                ", b='" + b + '\'' +
                ", c='" + c + '\'' +
                ", d='" + d + '\'' +
                '}';
    }

    public Person(String name, int age) {
    
    
        this.name = name;
        this.age = age;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }
    public void eat(){
    
    
        System.out.println("eat...");
    }

    public void eat(String food){
    
    
        System.out.println("eat..." + food);
    }
}

public class ReflectDemo02 {
    
    
    public static void main(String[] args) throws Exception {
    
    

        //0获取Personde Class对象
        Class personClass = Person.class;
        /*
            1. 获取成员变量们
				* Field[] getFields() :获取所有public修饰的成员变量
				* Field getField(String name)   获取指定名称的 public修饰的成员变量

				* Field[] getDeclaredFields()  获取所有的成员变量,不考虑修饰符
				* Field getDeclaredField(String name)
         */
        //Field[] getFields() :获取所有public修饰的成员变量
        Field[] fields = personClass.getFields();
        for (Field field : fields) {
    
    
            System.out.println(field);
        }

        System.out.println("--------------------------");
        //Field getField(String name)   获取指定名称的 public修饰的成员变量
        Field a = personClass.getField("a");
        //获取成员变量a的值
        Person p = new Person();
        Object result = a.get(p);
        System.out.println(result);
        //设置a的值
        a.set(p,"张三");
        System.out.println(p);

        System.out.println("===================");

        //Field[] getDeclaredFields()  获取所有的成员变量,不考虑修饰符
        Field[] declaredFields = personClass.getDeclaredFields();
        for (Field declaredField : declaredFields) {
    
    
            System.out.println(declaredField);
        }
        //Field getDeclaredField(String name)
        Field d = personClass.getDeclaredField("d");
        //忽略访问权限修饰符的安全检查
        d.setAccessible(true);//暴力反射
        Object value2 = d.get(p);
        System.out.println(value2);
    }
}

Demostración del programa:
Inserte la descripción de la imagen aquíConstructor: método de construcción
Crear objeto:
T newInstance (Object ... initargs)

		* 如果使用空参数构造方法创建对象,操作可以简化:
		* Class对象的newInstance方法

Ejemplo:

public class ReflectDemo03 {
    
    
    public static void main(String[] args) throws Exception {
    
    

        //0获取Personde Class对象
        Class personClass = Person.class;
        /*
            2. 获取构造方法们
				* Constructor<?>[] getConstructors()
				* Constructor<T> getConstructor(类<?>... parameterTypes)

				* Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
				* Constructor<?>[] getDeclaredConstructors()
         */

        //Constructor<T> getConstructor(类<?>...parameterTypes)
        Constructor constructor = personClass.getConstructor(String.class, int.class);
        System.out.println(constructor);
        //创建对象
        Object person = constructor.newInstance("张三", 22);
        System.out.println(person);

        System.out.println("----------------");


        Constructor constructor1 = personClass.getConstructor(String.class, int.class);
        System.out.println(constructor1);
        //创建对象
        Object o = personClass.newInstance();
        System.out.println(o);

    }
}

Demostración del programa:
Inserte la descripción de la imagen aquí
Método: Objeto de
método Método de ejecución:
Invocación de objeto (Objeto obj, Objeto ... args)

	* 获取方法名称:
		* String getName:获取方法名

Obtenga el nombre completo de la clase
* String getName ()

Ejemplo:

public class ReflectDemo04 {
    
    
    public static void main(String[] args) throws Exception {
    
    

        //0获取Personde Class对象
        Class personClass = Person.class;
        /*
            3. 获取成员方法们:
				* Method[] getMethods()
				* Method getMethod(String name, 类<?>... parameterTypes)

				* Method[] getDeclaredMethods()
				* Method getDeclaredMethod(String name, 类<?>... parameterTypes)

          */

        //获取指定名称的方法
        Method eat_meath = personClass.getMethod("eat");
        Person p = new Person();
        //执行方法
        eat_meath.invoke(p);

        Method eat_method2 = personClass.getMethod("eat", String.class);
        //执行方法
        eat_method2.invoke(p,"饭");

        //获取所有public 修饰的方法
        Method[] methods = personClass.getMethods();
        for (Method method : methods) {
    
    
            System.out.println(method);
            String name = method.getName();
            System.out.println(name);
            //method.setAccessible(true);
        }
        
        //获取类名
        String className = personClass.getName();
        System.out.println(className);//domain.Person
    }
}

Demostración del programa:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_44664432/article/details/109194848
Recomendado
Clasificación