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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周世阳 中级黑马   /  2012-7-29 14:03  /  1748 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 周世阳 于 2012-7-29 22:43 编辑

getClass和.class应该是等效的
但是getClass为什么无法获得基本类型的字节码,而.class就可以
例:
Class c1 = char.class -->通过
Class c2 = 'a'.getClass() -->报错

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

3 个回复

正序浏览
楼主这个问题发现的挺有意思的,其实API已经明确说明了:
     getClass()这个方法是Object类的,java中的任何类都是继承Object的,只有你创建了对象,这个对象就可以调用这个方法获取该类运行时的字节码对象。这说明Class这个类也可以创建对象调用它,让我浮想联翩了一小下,结果突然想起来,Class这个类没有构造,哈哈。其实有很多类都是不提供构造的,是有用意的哦
    基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。注意哦,void居然也是Class对象,让我震惊了一小下,哈,多谢楼主的小问题,有发现一个小知识点,看来API有事没事就要看。

评分

参与人数 1黑马币 +2 收起 理由
周世阳 + 2 i see,thanks

查看全部评分

回复 使用道具 举报
.getClass()是一个对象实例的方法,只有对象实例才有这个方法,具体的类是没有的。
类的Class类实例是通过.class获得的,而类没有.getClass()方法

除内部类外的其他类的应用上.class功能完全等于.getClass()!只是一个是用类直接获得的,一个是用实例获得的。
如果你希望获得更具体的例子建议你去http://blog.csdn.net/qianzhiyong111/article/details/7320879 看看,图文并茂,而且还谈到了动态加载和静态加载的问题,这方面我也不是很懂就不赘言了,希望能对你有所帮助



评分

参与人数 1黑马币 +2 收起 理由
周世阳 + 2 i see,thanks

查看全部评分

回复 使用道具 举报
Java中的基本数据类型不是对象,不能调用它的方法。
所以才需要对每一种基本数据类型提供一个包装类,这说明Java还不是一种完全面向对象的语言。
个人感觉,char.class返回的Class<Character>的实例是虚拟机根据"char.class"这个标识分配的,不能说明char具有属性。

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
周世阳 + 1 thanks
韦念欣 + 1 赞一个!

查看全部评分

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