黑马程序员技术交流社区

标题: 利用反射在一个类中调用另一个类中主函数时的疑惑 [打印本页]

作者: 燕国庆    时间: 2012-12-4 13:56
标题: 利用反射在一个类中调用另一个类中主函数时的疑惑
本帖最后由 燕国庆 于 2012-12-4 16:21 编辑

                System.out.println(mainMethod.invoke(null, (Object)new String[]{"zhangsan","lisi","wangwu"}));为什么在打印输出的时候会输出一个null那?按理不就是遍历打印出数组中的各个元素为止吗



class ArgumentsTest{
        public static void main(String[] args){
                for(String arg:args){
                        System.out.println(arg);
                }
        }
}

谢谢两位
作者: 冯盼    时间: 2012-12-4 14:34
public static void main(String[] args)throws Exception
{
  Class<?> arguments = ArgumentsTest.class;
  Method mainMethod = arguments.getMethods()[0];
  mainMethod.invoke(arguments, (Object)(new String[]{"aa","bb"}));//此处为从中调用底层方法的对象
}

class ArgumentsTest{
    public static void main(String[] args){
            for(String arg:args){
                    System.out.println(arg);
            }
    }
}

确实是遍历打印出数组中的各个元素为止。

作者: 罗会涛    时间: 2012-12-4 15:57
不仔细看还真看不出来,ArgumentsTest的main方法确实只打印了"zhangsan","lisi","wangwu".
最后的null是因为调用了mainMethod.invoke(null, (Object)new String[]{"zhangsan","lisi","wangwu"})的返回值,他的返回值是个null;
若想不打印null,就不要在外面包一个SOP,因为ArgumentsTest的main方法已经打印过一边了.
直接写成mainMethod.invoke(null, (Object)new String[]{"zhangsan","lisi","wangwu"})就可以了
作者: 燕国庆    时间: 2012-12-4 16:20
罗会涛 发表于 2012-12-4 15:57
不仔细看还真看不出来,ArgumentsTest的main方法确实只打印了"zhangsan","lisi","wangwu".
最后的null是因为 ...

哈哈
是的,明白了,是那样的问题,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2