Java反射应用

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());

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值