黑马程序员技术交流社区

标题: 关于获得字节码的问题[已解决] [打印本页]

作者: 周世阳    时间: 2012-7-29 14:03
标题: 关于获得字节码的问题[已解决]
本帖最后由 周世阳 于 2012-7-29 22:43 编辑

getClass和.class应该是等效的
但是getClass为什么无法获得基本类型的字节码,而.class就可以
例:
Class c1 = char.class -->通过
Class c2 = 'a'.getClass() -->报错
作者: 肖琦    时间: 2012-7-29 17:19
Java中的基本数据类型不是对象,不能调用它的方法。
所以才需要对每一种基本数据类型提供一个包装类,这说明Java还不是一种完全面向对象的语言。
个人感觉,char.class返回的Class<Character>的实例是虚拟机根据"char.class"这个标识分配的,不能说明char具有属性。


作者: 尤洋    时间: 2012-7-29 18:33
.getClass()是一个对象实例的方法,只有对象实例才有这个方法,具体的类是没有的。
类的Class类实例是通过.class获得的,而类没有.getClass()方法

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




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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2