黑马程序员技术交流社区
标题:
写一个程序,这个程序根据用户提供的类名,去执行该中的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