A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Yuan先生 中级黑马   /  2013-9-14 20:43  /  1334 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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

6 个回复

正序浏览
本帖最后由 第一印象 于 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,你把它打印出来了,所以控制台上看到了这个值
回复 使用道具 举报
不大明白这个问题
回复 使用道具 举报
╋☆Love↘七 发表于 2013-9-14 23:26
这个问题在这里:
  System.out.println(main.invoke(null, (Object)new String[]{"111", "222", "333"})); ...

{:soso_e183:}{:soso_e183:}
回复 使用道具 举报
这个问题在这里:
  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
希望可以帮到你
回复 使用道具 举报
大神都跑哪了?快来帮忙啊!!!
回复 使用道具 举报
哪位大神帮忙解答
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马