invoke(Object obj, Object… args):
invoke()就是调用类中的方法,第一个参数是obj(对象),在我们平常使用过程中用到的是类,类是对象的一个集合,第二个参数是args(参数),是调用invoke这个方法所使用的参数,我们使用是一般是类中的方法(method),因此invoke方法我们也可以这样理解:invoke(class,method),相当于把类中的方法参数化了。
比如Test类里有一系列名字相似的方法setValue1、setValue2等等。可以把方法名存进数组v[],然后循环里invoke(test,v[i]),就顺序调用了全部setValue。
参数:1)Obj–从中调用基础方法的对象
2)Args:用于方法调用使用的参数
返回:在参数为args的obj上调度此对象表示的方法的结果
public Object invoke(Object obj, Object... args)
//IllegalAccessException:如果这个Method对象强制Java语言访问控制,并且底层方法不可访问
//IllegalArgumentException:如果方法是一个实例方法,而指定的对象参数不是声明底层方法的类或接口的实例
throws IllegalAccessException, IllegalArgumentException,
InvocationTargetException //底层方法抛出异常
{
if (!override) {
if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) {
Class<?> caller = Reflection.getCallerClass();
checkAccess(caller, clazz, obj, modifiers);
}
}
MethodAccessor ma = methodAccessor; // read volatile
if (ma == null) {
ma = acquireMethodAccessor();
}
return ma.invoke(obj, args);
}