黑马程序员技术交流社区

标题: 对象在内存中如何建立的 [打印本页]

作者: wuyuwen    时间: 2014-12-25 18:07
标题: 对象在内存中如何建立的
例如Person p=new Person();如何执行
作者: 红楼    时间: 2014-12-25 18:14
1:先将硬盘上指定位置的Person.class文件加载进内存。
2:执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main方法的栈区分配了一个变量p。
3:在堆内存中开辟一个实体空间,分配了一个内存首地址值。new
4:在该实体空间中进行属性的空间分配,并进行了默认初始化。
5:对空间中的属性进行显示初始化。
6:进行实体的构造代码块初始化。
7:调用该实体对应的构造函数,进行构造函数初始化。()
8:将首地址赋值给p ,p变量就引用了该实体。(指向了该对象)
作者: wuyuwen    时间: 2014-12-25 19:23
红楼 发表于 2014-12-25 18:14
1:先将硬盘上指定位置的Person.class文件加载进内存。
2:执行main方法时,在栈内存中开辟了main方法的空 ...

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

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

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

QQ截图20141226010540.png

作者: 只会金克斯    时间: 2014-12-26 22:32
哎。各种大神
作者: 西风烈123    时间: 2014-12-26 22:35
看是视频有画图讲解比较直观
作者: reyzarc    时间: 2014-12-26 22:45
2楼很详细啊。




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