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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wuyuwen 中级黑马   /  2014-12-25 18:07  /  2238 人查看  /  10 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

例如Person p=new Person();如何执行

10 个回复

倒序浏览
1:先将硬盘上指定位置的Person.class文件加载进内存。
2:执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main方法的栈区分配了一个变量p。
3:在堆内存中开辟一个实体空间,分配了一个内存首地址值。new
4:在该实体空间中进行属性的空间分配,并进行了默认初始化。
5:对空间中的属性进行显示初始化。
6:进行实体的构造代码块初始化。
7:调用该实体对应的构造函数,进行构造函数初始化。()
8:将首地址赋值给p ,p变量就引用了该实体。(指向了该对象)
回复 使用道具 举报 3 0
红楼 发表于 2014-12-25 18:14
1:先将硬盘上指定位置的Person.class文件加载进内存。
2:执行main方法时,在栈内存中开辟了main方法的空 ...

谢啦!!!!!
回复 使用道具 举报
楼上解释的很详细了
回复 使用道具 举报
Person p = new Person();实际上就是在内存中做了这样一件事:Person *p = (Person*)maclloc(sizeof(Person));
也就是在内存中动态分配一块内存给Person类型的P存入堆结构,还有就是堆结构和栈结构实际上就是一种数据结构,并不是在内存中真的有一块内存是堆 有一块内存叫栈 动态的分配一块内存给Person 大小就是Person的数据类型大小,当编译的时候并不加载到内存,当程序运行起来并且运行到这个语句的时候才加载,,这个貌似叫动态加载 忘了。。
回复 使用道具 举报
路过                           
回复 使用道具 举报
二楼说的很详细!我再多看看!
回复 使用道具 举报
红楼 发表于 2014-12-25 18:14
1:先将硬盘上指定位置的Person.class文件加载进内存。
2:执行main方法时,在栈内存中开辟了main方法的空 ...

能给我解释一下这个图吗?

QQ截图20141226010540.png (132.02 KB, 下载次数: 17)

QQ截图20141226010540.png
回复 使用道具 举报
哎。各种大神
回复 使用道具 举报
看是视频有画图讲解比较直观
回复 使用道具 举报
2楼很详细啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马