黑马程序员技术交流社区

标题: 利用反射方式调用main方法遇到的问题 [打印本页]

作者: 梵天的梦    时间: 2014-2-22 12:34
标题: 利用反射方式调用main方法遇到的问题
package cn.itcast.day1;

import java.lang.reflect.*;

public class ReflectTest {

        /**
         * @param args
         */
        public static void main(String[] args) throws Exception{
       
                String startingClassName = args[0];
                Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);
                Object[] args1 = new Object[]{new String[]{"123","456","789"}};
                System.out.println(mainMethod.invoke(null, args1));
               
        }

}

class TestArguments{
        public static void main(String[] args){
                for(String arg:args){
                        System.out.println(arg);
                }
        }
       
}
在执行这段代码时结果如下:
123
456
789
null

为什么这里会有个null值被打出来呢


作者: itpower    时间: 2014-2-22 13:15
  1. System.out.println(mainMethod.invoke(null, args1));
复制代码

打印出一个null值是因为你打印了invoke方法的返回值,
而invoke调用的是TestArguments的mian方法,而mian方法是没有返回值的
所以打印的是null;
作者: 梵天的梦    时间: 2014-2-22 15:13
itpower 发表于 2014-2-22 13:15
打印出一个null值是因为你打印了invoke方法的返回值,
而invoke调用的是TestArguments的mian方法,而mian方 ...

哦,明白了,忽略了这点了,直接写mainMethod.invoke(null, args1)这个就行。谢谢了
作者: ↑↓ME→←    时间: 2014-2-22 21:40
System.out.println(mainMethod.invoke(null, args1));这个代码是先执行里面的方法,打印出各数字之后,然后你又打印该方法的返回值,所以又打印出null




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