通过反射调用方法和属性
概述
通过反射获取类的信息后,该怎么去使用它们?
即调用方法,设置属性等
实例
/**
* 通过反射做下面事情:
* 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());
}
}