黑马程序员技术交流社区

标题: 用反射方式调用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