通过反射调用方法和属性

概述

通过反射获取类的信息后,该怎么去使用它们?

即调用方法,设置属性等

实例

/**
 * 通过反射做下面事情:
 * 1.动态创建对象
 * 2.获取方法并且执行方法
 * 3.获取属性
 */
public class Demo04 {
    public static void main(String[] args) throws Exception{
        Class c1 = Class.forName("com.gbhh.reflections.User");
//        构造一个对象,这样使用了无参数构造器
        User user = (User)c1.newInstance();
        System.out.println(user);
//        通过构造器创建对象
        Constructor declaredConstructor = c1.getDeclaredConstructor(int.class, String.class, int.class);
        User user1 =(User)declaredConstructor.newInstance(1111,"嘟嘟嘟",20);
        System.out.println(user1);
//        通过反射调用普通方法
        User user2 = (User)c1.newInstance();
        //通过反射获取一个方法,该方法目前无对象
        Method setName = c1.getDeclaredMethod("setName", String.class);
//        激活调用方法,并且指定对象
        setName.invoke(user2,"dudu");
        System.out.println(user2.getName());
//        通过反射操作属性
        User user3 = (User)c1.newInstance();
        Field age = c1.getDeclaredField("age");
//        默认不能设置private属性,通过 setAccessible 关闭检查权限,即可设置,默认为false
        age.setAccessible(true);
        age.set(user3,21);
        System.out.println(user3.getAge());
    }
}