黑马程序员技术交流社区

标题: 让我晕菜的问题,希望有高手指点一下 [打印本页]

作者: 魏兴发    时间: 2011-11-5 11:45
标题: 让我晕菜的问题,希望有高手指点一下
一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的。我的问题来了:我们通过new关键字创建出来的对象所占用的内存空间跟这个字节码所占的内存空间之间有联系吗?如果有联系,那是什么联系?如果他们是两块独立的内存空间,那么我们反射机制创建的Class类的对象指向内存中的字节码,如Class cls1 = Class.forName("java.lang.String");那么为什么我们根据cls1就可以得到我们具体对象中的属性,方法等等呢???
作者: 吉许    时间: 2011-11-5 12:35
我的理解:不管你用这个类new多少个对象,这个类在内存中的字节码都只有一份.new出来的对象都存在于这个字节码内部.用反射相当于先由内部的各种成分得到相应的java类然后用这个类去操作内部的各种相对应成分.
作者: 咖啡    时间: 2011-11-5 23:58
可以得到,张老师高新技术加强篇有讲到,应该好好地去看下。
作者: fso918    时间: 2011-11-6 13:12
本帖最后由 fso918 于 2011-11-6 13:17 编辑

反射里的方法你还没看懂,严格来说,从类的字节码中是无法获得具体对象的属性的值的。
而只能获取方法,通过getXxx方法,传递一个具体的对象进去,才能获得具体对象的属性的值。
反射获取的值根源还是在类的对象在内存中的那块内存




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