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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© homeless 中级黑马   /  2014-3-1 09:49  /  1003 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

内存分成三块,栈,堆,代码区。在执行Person p=new Person()时,person类的静态变量,静态方法,普通方法会被放入 代码区,引用变量p会在栈里面,堆里面会生成描述类数据的对象,这些数据执行默认初始化。接着是构造代码块的执行,然后在构造函数调用时会追溯person类的父类直到OBJECT类,最后再自上而下的显式初始化堆里面的数据。最后在内存里的形态就是:栈里面有个p指向Person对象,堆里面依次存在着person对象和它所有的父类对象(或者说是对父类数据的描述,我不知道在这里称父类对象对不对,就是在调用父类构造函数时产生的东西,也可能没有东西产生,在调用到父类构造函数时,会不会在堆里开空间,还是和person类对象共用同一个空间,我疑惑的地方就是这里,不知道该怎么理解才对),还有就是代码区里,那些person类的方法 和它父类的方法都是怎么分布的

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

3 个回复

倒序浏览
子类继承父类,new Person() 时在堆中生成一个new Person 的区域 ,但是在这个new Personde 区域里面还有一个super的指针,指向new Person 中的一块 专门存储父类 成员变量的区域,我们老师就是这样讲的!

评分

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

查看全部评分

回复 使用道具 举报
我也刚看到这里,楼主的问题瞬间解决我的疑惑啊。。。。
回复 使用道具 举报
在执行Person p=new Person()时,除了在堆上会有个person对象,person对象还拥有一个Object对象。调用父类构造函数的时候,是要创建对象的,可以理解为,先有父类才能有子类。
方法都是放在方法区的,在运行时会被加载到栈上去运行。

评分

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

查看全部评分

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