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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙宁洋 中级黑马   /  2013-6-1 11:33  /  2767 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

     Class.forName()
       new Demo().getClass()
        Demo.class
这三种方式有什么优缺点吗?

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

5 个回复

正序浏览
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
回复 使用道具 举报
第一种方式是通过别人传进来的名字,得到字节码的,也是最常用的一直。第二种和第三种查不多,都是先知道这个类后通过这个类得到的字节码的。
回复 使用道具 举报
方式一:调用Object类的getClass()方法。这种方法的缺点是先要明确具体的类,并创建其对象。在反射中不建议使用,如果不知道具体类,在反射中也没法使用。

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

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

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
Class.forName(),括号里面的参数是字符串类型,为完整的类名。通过类名获得其字节码
new Demo().getClass(),这个是通过通过一个实例对象获得类的字节码
Demo.class是通过类的一个静态方法获得其字节码
三种方式无优劣之分,只有方便之别。当你只知道完整的类名的字符串表示是用Class.forName(),当你知道类名(比如说有一个类是Demo)时用Demo.class,如果你知道一个实例对象用该对象(比如说instance为Demo类的实例对象)用instance.geClass()比较方便。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
没什么有缺点,forName()在类没有加载的情况下,可以自动加载相关类。而另两种是类已经加载过了,然后获取.class。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马