黑马程序员技术交流社区
标题:
用反射方式调用main方法的问题
[打印本页]
作者:
李敬
时间:
2012-8-12 20:29
标题:
用反射方式调用main方法的问题
本帖最后由 李敬 于 2012-8-12 20:44 编辑
在张孝祥老师视频中讲到这段代码
class TestArguments {
public static void main(String[] args) {
for(String arg: args) {
System.out.println(arg);
}
}
class InvokeMain {
public static void main(String[] args) {
String startClassName = args[0];
Class startClassByteCode = Class.forName(startClassName);
Method mainMethod =startClassByteCode.getMethod("main", String[].class);
mainMethod.invoke(null, new Object[] {new String[] {"aaa","bbb","ccc"}});
}
}
之后说道:
可以看出使用反射调用main的好处,即
编写代码时不知道要调用哪个类的main方法,在运行时你给一个类名作参数,给哪个类名就运行哪个类的main方法
。
这不是还需要知道要调用哪个类吗?哪位朋友能简单易懂的说下,这里张老师想说明啥问题吗,小弟头脑愚钝,求开窍!
作者:
黑马连家华
时间:
2012-8-13 13:50
个人认为 还是毕老师讲得给力
作者:
周世阳
时间:
2012-8-13 13:59
假如现在有A、B和C三个类,B是一种可以启动其他类的类,现在通过B类来启动A类,如果你知道类名,并且在B类里写出了调用A类的代码,那么A类就被硬编码到了B类的字节码里,如果现在你想启动C类了呢?那么除非你重新写源文件.java然后在编译,要不你是无法启动C类其他类的。反射调用的好处是,写B类的人不知道要掉用的类名,只有想用B类启动其他类的人才知道他想启动什么类,这样只需要反射,让B类获得一种读取类名的方法,它可以不修改源码的情况下启动任何其他类,这样更加通用。否则你必须每次都修改B类的源码然后重新编译
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2