String str = "aa";
Class cla = Class.getClass();
Method mt = cla.getDeclaredMethod("put",??);
........//另一个类;
public class aa
{
 public void put()
{
   ........
}
}  想请问下,getDeclaredMethod("put",??);的第二个参数到底是什么啊?参数是 Class 对象的一个数组,它按声明顺序标识该方法的形参类型;api上是这样写的;怎么会是Class对象的数组呢?或者说改参数表示所调用方法的形参,当我的put()方法没有参数传入的时候能用Null来代替吗?
   二、我的另一个类中必须要有main()函数吗?
 

解决方案 »

  1.   

    Method中的invoke()方法public Object invoke(Object obj,
                         Object... args)
    obj - 从中调用底层方法的对象
    args - 用于方法调用的参数 
     很迷糊……希望高手解释下……
      

  2.   

    一、是一个Class类型的数组,就是说,我根据你的方法名和你的参数类型列表,我就可以知道你要的那个方法,
    如果没有参数的话,是可以用null来替代的二、如果你要是运行的话,当然要有一个类中有main函数了,如果不运行的话,自然就不需要了.这行定错了吧Class cla = Class.getClass();应该是Class cla = Class.forName(str);
      

  3.   


    Mehtod method;
    method.invoke(obj,args);说明,你要调的这个method是obj对象的,因为普通的方法都是属于对象的,平常我们调的时候,是要先实例化一个对象,然后obj.method(args)就可以了,反射的时候也是需要这个对象的。args就是调用这个方法的实参呀实际上就是等于obj.method(args),只是用反射的时候,我们不知道这个对象的方法名的时候,就可以反射去调,或者说是我只要把方法名和实参,类名都写到一个文本文件中,这样就可以根据文本文件支态去调用相应的类和方法,而不是去改代码
      

  4.   

    就是你要得到的这个方法的参数类型的数组
    比如一个方法定义如下 put(String str,Date date) {}
    你的方法有两个参数,一个是String ,一个是Date 
    就应该通过下面的语句得到这个Method对象
    Method mt = cla.getDeclaredMethod("put",new Class[]{String.class,Date.class});
    没有参数 就传一个null过去就可以了
    只有你的启动类才需要main函数
      

  5.   


    Object... args意思就是,这个方法,除了第一个参数obj以外的剩余的参数都装入一个Objetc[]里,例如
    你调用的时候这样
    method.invoke(instance,new Srting("agr1"),new String("arg2"));
    这个时候在这个invoke函数内部会把后面2个参数整成,new Object[]{new Srting("agr1"),new String("arg2")}的~!这样明白了八!还有Method mt = cla.getDeclaredMethod("put",??);
    至于这个,比如Method mt = cla.getDeclaredMethod("put",String.class,String.class);这个意思,也就是这个方法的2各参数是2个String类型,你也可以这样String.class,int.class~!
      

  6.   

    楼上的;
    Class cla = Class.getClass();
    是我自己敲错了;实际程序中我是写的Class cla = Class.forName(str);
      可是getDeclaredMethod("put",??);方法一直报错;
      如果该方法是有参数的的,那我getDeclaredMethod("put",??);中应该怎样写呢?比如
    put(int i,String str)
    {
    }
    这样呢?
      

  7.   

    一、getDeclaredMethod("put",??);的第二个参数到底是什么啊
    后面的参数是对应的方法的参数。如你的put方法里面有一个参数,那你这里应该传String.class。
    二、另一个类中必须要有main()函数吗? 
    不需要,你只要获取另一个类的方法(得到的是一个Method类的对象),然后调用其invoker方法可以调用。
      

  8.   

    上面不是给你例子了吗
    getDeclaredMethod("put",new Class[]{int.class,String.class});
      

  9.   

    大爷;
    还是错误;
    还是谢谢大家!
    cla.getDeclaredMethod("put",new Class[]{String.class,Date.class}); 
    改方法中的第二个参数写Null怎么都不行;郁闷……方法报错;
      

  10.   


    没有参数的时候用null呀
    像你这样的参数的话,用
    getDeclaredMethod("put",new Class[]{int.class,String.class}});
      

  11.   

    cla.getDeclaredMethod("put",new Class[]{String.class,Date.class}); 
     方法找不到符号;是参数错误吧;
    put()方法没有形参;我就写了null;
    编译过不了?
      

  12.   

    public class Test{
    public static void main(String args[]) throws Exception {
    Class cl = Test.class;
    Method me1 = cl.getDeclaredMethod("put",new Class[]{int.class,String.class});
    Method me2 = cl.getDeclaredMethod("put",null);
    me1.invoke(new Test(), new Object[]{1,"hello"});
    me2.invoke(new Test(),  null );
    } public void put(int i, String str) {
    System.out.println(str+"  "+i);
    }

    public void put() {
    System.out.println("@@@@@@@@@@@@@@@@@@@");
    }
    }
      

  13.   

    如果方法没有参数你就用 
    cla.getDeclaredMethod("put",new Class[]{}); 
    应该可以