注解反射之通过Class对象来操作对象的属性和方法

代码如下

package com.loubin;

import java.lang.annotation.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Main {
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        User user = new User("张三", 18);
        Class c = user.getClass();
        System.out.println("获取名字---------------------------");
        Field field = c.getDeclaredField("name");
        String name = (String) field.get(user);
        System.out.println(name);
        System.out.println("修改名字----------------------------");
        field.set(user, "李四");
        String name2 = user.getName();
        System.out.println(name2);
        System.out.println("调用方法——---------------------------");
        Method method = c.getDeclaredMethod("shout", String.class);
        method.invoke(user, "李白");
//        Class c = User.class;
//        String name = c.getName();
//        System.out.println(name);
//        System.out.println("获取所有属性-------------------------------");
//        Field[] fields = c.getDeclaredFields();
//        for (Field field : fields) {
//            System.out.println(field.getName());
//        }
//        System.out.println("获取指定属性-----------------------------------");
//        Field field = c.getDeclaredField("name");
//        System.out.println(field.getName());
//        System.out.println("获取所有方法----------------------------------");
//        Method[] methods = c.getDeclaredMethods();
//        for (Method method : methods) {
//            System.out.println(method.getName());
//        }
//        System.out.println("获取指定方法----------------------------------");
//        Method method = c.getDeclaredMethod("getName");
//        System.out.println(method.getName());
//        System.out.println("获取无参构造器------------------------------------");
//        Constructor constructor = c.getDeclaredConstructor();
//        System.out.println(constructor.getName());
//        System.out.println("获取有参构造器-----------------------------------");
//        Constructor constructor1 = c.getDeclaredConstructor(String.class, int.class);
    }
}


class User{
    String  name;
    int age;

    public User() {
    }

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

    public void shout(String name){
        System.out.println("是谁叫了一下" + name);
    }
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

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


}

测试结果如下

 

posted @ 2025-02-07 23:06  地球上最后一个直男  阅读(8)  评论(0)    收藏  举报