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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  String startingClassName = args[0];
  Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);
  mainMethod.invoke(null, new Object(new String[]("111","222","333")));


这几行代码怎么就执行了其它类的main方法呢?谁给详细讲解一下呢?谢谢了:loveliness:  
要上班呢,洗脸去,晚上回来等答案。谢谢了噢。嘿嘿

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

3 个回复

倒序浏览
黑马网友  发表于 2011-9-14 09:43:01
沙发
要执行某个类的方法,不管是什么方法Main(),还是别的方法,都必须获得这个方法,获得方式是通过反射。
步骤一:要执行哪个类的main方法。获得这个类。==》Class.forName(startingClassName);
步骤二:通过类里面的getMethod方法获得名为main的方法。API
         Method getMethod(String name, Class<?>... parameterTypes)
            返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
     Method mainMethod = Class.forName(startingClassName).getMethod("main", [color=DarkRed]String[].class[/color]); 第一个参数是要执行的方法的名字,你要执行main方法,就写main第二个参数是main方法的参数类型
我们知道public static  void main([color=DarkRed]String [][/color] args){}这个方法里面的参数是String数组.getMethod方法里第二个参数就是String[].class
获得这个方法以后就去执行它:这是类Method里面的invoke方法
Object invoke(Object obj, Object... args)
          对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。 因为Main方法是静态方法,所以第一个参数为null,你的程序里面就是将String[]("111","222","333")作为参数传递给了 startingClassName这样一个类。由于程序运行到这里的时候会自动拆箱,所以将他们装箱成一个Object
。再看不懂去看看反射的视频

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-14 22:47:02
藤椅

回复 沙发 的帖子

九点半上班,今天迟到了十分钟。这个东西我搞清楚。谢谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马