`public class Reject02 {
public static void main(String[] args) throws Exception {
String str="reject.Person";
try {
/**
* 通过反射调取方法修改参数,应用场景比较多
*/
//获取反射对象
Class<?> name = Class.forName(str);
//获取实例,因为newInstance方法得到的是object类型的,所以需要强转
Person instance = (Person) name.newInstance();
//instance.setName("高淇");
//通过反射对象获取一般方法
Method method = name.getMethod("setName", String.class);
//利用反射中的invoke方法激活通过反射调取的方法,里面的参数是实例对象和方法参数
method.invoke(instance, "高淇");
System.out.println(instance.getName());
/**
* 通过反射调取属性,修改属性参数。
*/
//通过反射获取反射对象
Class<?> name1 = Class.forName(str);
//通过反射获取某个声明的属性
Field declaredField = name1.getDeclaredField("name");
//一般属性私有化,通过setAccessible方法,可以免去安全访问环节,对象可以直接访问。
declaredField.setAccessible(true);
//通过set方法,修改属性,里面的参数是实例对象和修改后的参数。
declaredField.set(instance, "gaoqi");
System.out.println(instance.getName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
`