Java getMethod与invoke的使用

1、forName 方法

   forName是一个静态方法,其作用:通过调用来获取类名对应的Class对象,同时将Class对象加载进来。

  如果将类名保存在字符串(如xml)中,就可以在程序运行时,动态调用加载。

注意:只有调用的参数是类名或者方法时,才可用。

2、newInstance()方法

   作用:将对象实例化。返回类型为Object。与new的区别在于,new可以带参,而newInstance()不可以,一边初始化无参类。通常与forName()配合使用。

String str = "java.util.Date";
Class cl1= Class.forName(str);//加载java.util.Date类
Object obj = cl1.newInstance();//实例化cl1

3、getMethod()方法
  getMethod方法与getField方法类似,getField方法根据表示域名的字符串,返回一个Field对象。而getMethod方法则根据方法名称和相关参数,来定位需要查找的Method对象并返回。

  getMethod与getDeclareMethods方法的区别在于,后者返回一个Method对象数组,需要自己在结果中查找所需Method对象。

  原型: Method getMethod(String name,Class...parameterTypes)

   参数解释:name: method的名称

                       parameterTypes:method的参数类型的列表(参数顺序需按声明method时的参数列表排列)

   返回:符合method名称和参数的method对象

   抛出错误:NoSuchMethodException   

                      原因:没有找到所要查询的Method对象  或  Method名称为“<init>”或“<clinit>”

                       NullPointerException

                       原因:所要查询的Method对象的名称为null

                        SecurityException

                        原因:调用的类或其父类没有调用权限

  例:

Method m1 = Employee.class.getMethod("getName");
Method m2 = Employee.class.getMethod("raiseSalary",double.class);

  上面例子分别获得了Employee类的getName方法和raiseSalary方法的 方法指针m1,m2。

4、invoke方法

  作用:调用包装在当前Method对象中的方法。

   原型:Object invoke(Object obj,Object...args)

   参数解释:obj:实例化后的对象

                       args:用于方法调用的参数

   返回:根据obj和args调用的方法的返回值

   抛出错误:IllegalAccessException

                      原因:Method对象强制Java语言执行控制 或 无权访问obj对象

                        IllegalArgumentException

                       原因:方法是实例化方法,而指定需要调用的对象并不是实例化后的类或接口

  例:

      Class l = Class.forName("test1.A"); 
      Object obj1 = l.newInstance(); 
      Object[] obj2 = new Object[1];
      obj2[0] = new String("hello world"); 
      Method m = l.getMethod("a1",new Class[] { String.class });
      Object obj3 = m.invoke(obj1, obj2);  


 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值