黑马程序员技术交流社区

标题: 写一个程序,这个程序根据用户提供的类名,去执行该中的main方法 [打印本页]

作者: 刘肥    时间: 2011-9-14 08:41
标题: 写一个程序,这个程序根据用户提供的类名,去执行该中的main方法
  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:  
要上班呢,洗脸去,晚上回来等答案。谢谢了噢。嘿嘿
作者: 匿名    时间: 2011-9-14 09:43
要执行某个类的方法,不管是什么方法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
。再看不懂去看看反射的视频
作者: 匿名    时间: 2011-9-14 22:47
标题: 回复 沙发 的帖子
九点半上班,今天迟到了十分钟。这个东西我搞清楚。谢谢了




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