黑马程序员技术交流社区

标题: 反射main函数的问题 [打印本页]

作者: Yuan先生    时间: 2013-9-14 20:43
标题: 反射main函数的问题
本帖最后由 Yuan先生 于 2013-9-15 08:55 编辑
  1. package cn.itheima.day1;
  2. import java.lang.reflect.Method;
  3. public class Test01 {
  4.     public static void main(String[] args) throws Exception {
  5.                 String startingClassName = "cn.itheima.day1.TestArguments1";
  6.                 Method main = Class.forName(startingClassName).getMethod("main", String[].class);
  7.                 System.out.println(main.invoke(null, (Object)new String[]{"111", "222", "333"}));
  8.         }
  9. }
  10. class TestArguments1{
  11.     public static void main(String args[]){
  12.             System.out.println("length" + args.length);
  13.             for(int i = 0; i < args.length; i++){
  14.                     System.out.println(args[i]);
  15.             }
  16.     }
  17. }
复制代码
这个程序的结果为什么会是:
length3
111
222
333
null

作者: 潘才新    时间: 2013-9-14 20:46
哪位大神帮忙解答
作者: Yuan先生    时间: 2013-9-14 22:54
大神都跑哪了?快来帮忙啊!!!
作者: ╋☆Love↘七    时间: 2013-9-14 23:26
这个问题在这里:
  System.out.println(main.invoke(null, (Object)new String[]{"111", "222", "333"}));
最后那个 null 是这个输出的 因为void没有返回值。所以为 NULL;
  System.out.println("1" + main.invoke(null, (Object)new String[]{"111", "222", "333"}));
你这样试下  就会输出 1null
希望可以帮到你
作者: Yuan先生    时间: 2013-9-15 08:54
╋☆Love↘七 发表于 2013-9-14 23:26
这个问题在这里:
  System.out.println(main.invoke(null, (Object)new String[]{"111", "222", "333"})); ...

{:soso_e183:}{:soso_e183:}

作者: aspoMAN    时间: 2013-9-18 23:33
不大明白这个问题
作者: 第一印象    时间: 2013-9-20 15:45
本帖最后由 第一印象 于 2013-9-20 15:56 编辑

为什么会打印这个结果?
首先,你用反射调用了TestArguments1类的main函数,而且给main函数传了一个数组参数new String[] { "111","222", "333" },所以,对于打印下面的这几个值应该是没什么疑问的吧:
length3
111
222
333
这就跟正常调用main函数并传了一个数组的参数给它是一样的道理,只是最后一个值,
打印的是null,这个你把鼠标移到invoke方法上去你会发现,invoke方法返回的是一个Object类型的值,
对于没有返回值的函数,默认返回是null,而main函数是没有返回值的,所以打印了null,这么说不知道能否明白,如果不明白,看下面:
  1. System.out.println(main.invoke(null, (Object) new String[] { "111",
  2.                                 "222", "333" }));
复制代码
你不是打印了这个main.invoke方法嘛,这个方法返回了一个null,你把它打印出来了,所以控制台上看到了这个值




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