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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jiangyutc 中级黑马   /  2014-3-4 18:51  /  1377 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 jiangyutc 于 2014-3-4 20:27 编辑

请问
类名,class
对象。getclass()
和Class。forname()

这三种获取字节码文件的方法有什么不同
什么时候该用呢?
我看了别人的回答
第一种方法的缺点是先要明确具体的类,并创建其对象。在反射中不建议使用,如果不知道具体类,在反射中也没法使用。

第二种方法利用任何数据类型都有一个静态的属性:.class属性;利用此静态属性来获取对应的Class对象。此方法相对简单,但仍需要明确类中的静态成员,不够扩展,不建议使用。

第三种方法利用Class类的方法Class.forName(className)来获取,这个只需要知道对应类的字符串名即可,扩展性好,操作方便,建议在反射中使用。

        这个回答中的第二种里面的“但仍需要明确类中的静态成员 ”这句话是什么意思???
求解
谢谢

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

1 个回复

倒序浏览
类名.class本身就是类对应的class文件
对象.getClass()可以获取它对应类的class文件
两者区别不大,只知道对象名而不知道类名的话,第二个就实用了
Class.forName()这个是可以实现动态加载类的,比如你具体不知道类是什么样的只通过类名,在运行时动态链接加载所需类,看看它的forName代参的方法就比较明白了forName(String name, boolean initialize, ClassLoader loader)可以指定加载器的,也可以定义是否加载静态区

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

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