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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏兴发 黑马帝   /  2011-11-5 11:45  /  1799 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的。我的问题来了:我们通过new关键字创建出来的对象所占用的内存空间跟这个字节码所占的内存空间之间有联系吗?如果有联系,那是什么联系?如果他们是两块独立的内存空间,那么我们反射机制创建的Class类的对象指向内存中的字节码,如Class cls1 = Class.forName("java.lang.String");那么为什么我们根据cls1就可以得到我们具体对象中的属性,方法等等呢???

3 个回复

倒序浏览
我的理解:不管你用这个类new多少个对象,这个类在内存中的字节码都只有一份.new出来的对象都存在于这个字节码内部.用反射相当于先由内部的各种成分得到相应的java类然后用这个类去操作内部的各种相对应成分.

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
可以得到,张老师高新技术加强篇有讲到,应该好好地去看下。
回复 使用道具 举报
本帖最后由 fso918 于 2011-11-6 13:17 编辑

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

评分

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

查看全部评分

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