在Method 类中有一个方法invoke(),它的定义是:public Object invoke(Object obj,
                     Object... args)
              throws IllegalAccessException,
                     IllegalArgumentException,
                     InvocationTargetException
请问invoke方法的作用是什么?另外参类args是什么意思?请朋友帮我解答,我在学sping要用到动态代理,这没搞不清就不好理解spring了。

解决方案 »

  1.   

    调用方法啊。Method是一个方法,方法对象。Method.Invoke相当于method();
      

  2.   

    invoke
    public Object invoke(Object obj,
                         Object... args)
                  throws IllegalAccessException,
                         IllegalArgumentException,
                         InvocationTargetException对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。 
    如果底层方法是静态的,那么可以忽略指定的 obj 参数。该参数可以为 null。 如果底层方法所需的形参数为 0,则所提供的 args 数组长度可以为 0 或 null。 如果底层方法是实例方法,则使用动态方法查找来调用它,这一点记录在 Java Language Specification, Second Edition 的第 15.12.4.4 节中;在发生基于目标对象的运行时类型的重写时更应该这样做。 如果底层方法是静态的,并且尚未初始化声明此方法的类,则会将其初始化。 如果方法正常完成,则将该方法返回的值返回给调用者;如果该值为基本类型,则首先适当地将其包装在对象中。但是,如果该值的类型为一组基本类型,则数组元素不 被包装在对象中;换句话说,将返回基本类型的数组。如果底层方法返回类型为 void,则该调用返回 null。 
    参数:
    obj - 从中调用底层方法的对象
    args - 用于方法调用的参数 
    返回:
    使用参数 args 在 obj 上指派该对象所表示方法的结果 
    抛出: 
    IllegalAccessException - 如果此 Method 对象强制执行 Java 语言访问控制,并且底层方法是不可访问的。 
    IllegalArgumentException - 如果该方法是实例方法,且指定对象参数不是声明底层方法的类或接口(或其中的子类或实现程序)的实例;如果实参和形参的数量不相同;如果基本参数的解包转换失败;如果在解包后,无法通过方法调用转换将参数值转换为相应的形参类型。 
    InvocationTargetException - 如果底层方法抛出异常。 
    NullPointerException - 如果指定对象为 null,且该方法是一个实例方法。 
    ExceptionInInitializerError - 如果由此方法引起的初始化失败。
      

  3.   

    就是说 如果Method代表了一个方法 那么调用它的invoke就相当于执行了它代表的这个方法
      

  4.   

    哦,方法的功能我差不多懂了,那它里的两个参数,Object obj和Object... args是代表什么意思
      

  5.   

    根据调用的方法而传递不同的参数,就这意思。
    API:
    如果基础方法是静态的,那么可以忽略指定的 obj 参数。该参数可以为 null。 
    如果基础方法所需的形参数为 0,则所提供的 args 数组长度可以为 0 或 null。 
      

  6.   

    Object... args表示可变长参数。
    例如:void f(int...intArray){
      for(int i:intArray)
      System.out.println(i+" ");
    }
    调用:f(1),f(1,2);f(1,2,3)等;