黑马程序员技术交流社区

标题: 反射方法执行某个类的main方法问题<已经解决> [打印本页]

作者: 马林康    时间: 2012-6-13 20:41
标题: 反射方法执行某个类的main方法问题<已经解决>
本帖最后由 马林康 于 2012-6-14 06:51 编辑

执行代码
  1. Method methodMain=TestDemo.class.getMethod("main", String[].class);
  2. System.out.println(methodMain.invoke(null, new Object[]{new String[]{"111","222","333","444"}}));
复制代码
  1. class TestDemo{
  2. public static void main(String[] args)
  3. {
  4. for(String str:args)
  5. {
  6. System.out.println(str);
  7. }
  8. }
  9. }
复制代码
结果后面怎么多了个null


作者: 刘鹏程    时间: 2012-6-13 21:21
methodMain.invoke(null, new Object[]{new String[]{"111","222","333","444"}});这个方法调用后显示的是你上图中的
111、222、333、444
但你不小心在方法外面多加了一个输出,即:System.out.println(methodMain.invoke(null, new Object[]{new String[]{"111","222","333","444"}}));
经查文档中的Method中的方法invoke,文档中说明如下:
如果方法正常完成,则将该方法返回的值返回给调用者;如果该值为基本类型,则首先适当地将其包装在对象中。但是,如果该值的类型为一组基本类型,则数组元素不 被包装在对象中;换句话说,将返回基本类型的数组。如果底层方法返回类型为 void,则该调用返回 null。
由于你调用的是main方法,也就是void类型,最后就打印出null了。
作者: 李盼    时间: 2012-6-13 22:38
如果方法正常完成,则将该方法返回的值返回给调用者;如果该值为基本类型,则首先适当地将其包装在对象中。但是,如果该值的类型为一组基本类型,则数组元素不 被包装在对象中;换句话说,将返回基本类型的数组。如果底层方法返回类型为 void,则该调用返回 null。

API文档查到的!




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