获取并操作类中受保护对象
1: 创建目标类Field对象
Field f=目标类.getClass().getDeclaredField("受保护变量名");
2:设置Field标记
f.setAccessible(true);
此时即使目标类中的变量为private也能访问并修改(get和set)。
getFields()方法与getDeclaredFields()
均返回Filed类型数组,若想对指定Field操作,需要遍历该数组并在遍历过程中进行判断和操作。
调用静态方法
1:创建目标类Method对象
Method m=目标类.getClass().getDeclaredMethod("方法明",参数.class);
2:调用
m.invoke(null,参数);
参数为数组时,传入写法需注意:
当参数为某一个类型的数组时,在调用该方法时若写:
定义: 方法(类型[] args);
调用: 方法(new 类型[] args); 方法(数组名);
此时虚拟机会将此参数识别为jdk低版本中多参数写法,则会对数组进行遍历,导致程序挂。
解决方案:
方法(new (Object)类型[] args); 方法((Object)数组名);
将参数数组封装在一个Object元素中,这时虚拟机则会将整个参数传入方法,使程序正常运作。