public static void main(String[] args) throws Exception {
Class clz = User1.class;
Object obj =clz.newInstance();
                Method m = clz.getDeclaredMethod("sayHello", int.class);
                m.setAccessible(true);
m.invoke(obj, 20);
Object ret =m.invoke(obj, 20);
System.out.println(ret);
}
class User1{
private void sayHello(int age){
System.out.println(age);
}
}输出结果为:
20
20
null
我想问下:为什么会有个null?null是哪里来的?以及输出ret的时候为什么会是方法的结果,而不是地址值?

解决方案 »

  1.   

    因为方法是void,所以Object是null,去看一下API
      

  2.   

    用API看什么
    我查Object类也没找到答案啊。。
      

  3.   

    因为你方法的返回值是 void ,那 ret 肯定是 null 啊,不然你觉得是什么
      

  4.   


    你 输出的那个 System.out.println(ret); 里面的ret 是m.invoke(obj, 20)的返回值,所以你应该看 Method 的 invoke 方法API,而不是Object类的。。
      

  5.   

    你这个问题可能很奇葩,我的解释是没执行一次invoke,都会调用一次方法,那么
    m.invoke(obj, 20);
    这句话就调用一次,因此输出第一个20
    Object ret =m.invoke(obj, 20);
    这句话中也调用了一次,因此输出了第二个20
    System.out.println(ret);
    最后一次打印,由于sayHello方法无返回值,因此ret这个对象没有被赋值,也就打印了null了
    private void sayHello(int age){
     System.out.println(age);
    }
      

  6.   

    System.out.println(ret)这个地方做了输出,而你方法返回的是void,所以ret接收到的多人是null了