public Method getMethod(String name,
Class... parameterTypes)
throws NoSuchMethodException,
SecurityException返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。name 参数是一个 String,用于指定所需方法的简称。parameterTypes 参数是按声明顺序标识该方法形式参数类型的 Class 对象的一个数组。如果 parameterTypes 为 null,则按空数组处理。
如果 name 是 "<init>" 或 "<clinit>",则将引发 NoSuchMethodException。否则,要反映的方法由下面的算法确定(设 C 为此对象所表示的类):
在 C 中搜索任一匹配的方法。如果找不到匹配的方法,则将在 C 的超类上递归调用第 1 步算法。
如果在第 1 步中没有找到任何方法,则在 C 的超接口中搜索匹配的方法。如果找到了这样的方法,则反映该方法。
在 C 类中查找匹配的方法:如果 C 正好声明了一个具有指定名称的公共方法并且恰恰有相同的形式参数类型,则它就是反映的方法。如果在 C 中找到了多个这样的方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则反映该方法;否则将从中任选一个方法。
请参阅《Java Language Specification》的第 8.2 和 8.4 节。
参数:
name - 方法名
parameterTypes - 参数列表
返回:
与指定的 name 和 parameterTypes 匹配的 Method 对象
抛出:
NoSuchMethodException - 如果找不到匹配的方法,或者方法名为 "<init>" 或 "<clinit>"
NullPointerException - 如果 name 为 null
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
调用 s.checkMemberAccess(this, Member.PUBLIC) 拒绝访问方法
调用方的类加载器不同于也不是该类的类加载器的一个祖先,并且对 s.checkPackageAccess() 的调用拒绝访问该类的包
import java.lang.reflect.*;
public class TestM
{
public static void main(String[] args)
{try{
TestM t = new TestM();
Class c = t.getClass();
Class[] cargs = new Class[2];
String[] realArgs = {"aa","bb"};
cargs[0] = realArgs.getClass();
Integer in = new Integer(2);
cargs[1] = in.getClass();
Method m = c.getMethod("test",cargs); //调用了test方法,返回值为Method变量
Object[] inArgs = new Object[2];
inArgs[0] = readArgs; //呵呵,此处wingzhang大侠敲错了应该是realArgs
inArgs[1] = in;
m.invoke(t,inArgs);}catch(Exception e){System.out.println(e);}
}
public void test(String[] str,Integer stri)
{for(int j = 0; j < str.length; j ++)
System.out.println(str[j]);
System.out.println(stri.intValue());}
}