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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李敬 中级黑马   /  2012-8-12 20:29  /  1509 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李敬 于 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方法

这不是还需要知道要调用哪个类吗?哪位朋友能简单易懂的说下,这里张老师想说明啥问题吗,小弟头脑愚钝,求开窍!

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
个人认为 还是毕老师讲得给力
回复 使用道具 举报
假如现在有A、B和C三个类,B是一种可以启动其他类的类,现在通过B类来启动A类,如果你知道类名,并且在B类里写出了调用A类的代码,那么A类就被硬编码到了B类的字节码里,如果现在你想启动C类了呢?那么除非你重新写源文件.java然后在编译,要不你是无法启动C类其他类的。反射调用的好处是,写B类的人不知道要掉用的类名,只有想用B类启动其他类的人才知道他想启动什么类,这样只需要反射,让B类获得一种读取类名的方法,它可以不修改源码的情况下启动任何其他类,这样更加通用。否则你必须每次都修改B类的源码然后重新编译

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马