黑马程序员技术交流社区

标题: java面向对象 Person p=new Person(); [打印本页]

作者: 飘过的云    时间: 2015-5-18 22:06
标题: java面向对象 Person p=new Person();
1、因为new用到 person.class,所以类加载器会找到person.class文件并加载到内存。
2、执行类中的static代码块,如果有的话,会给person.class类进行初始化。
3、在栈内存中为p开辟一个空间,并存储 变量p
4、new Person()时,会在堆内存中开辟空间,分配内存地址。
5、成员变量进入开已经辟出的堆区并进行默认初始化,成员方法进入方法区。
6、String name="dajiahao";会对属性进行显示初始化。
7、然后构造代码块对对象进行初始化。
8、对应的构造函数对对象进行初始化。
9、将内存地址赋给栈内存中的p变量。

作者: 黑马生涯    时间: 2015-5-18 23:58
好棒,总结的很不错哦!
作者: 飘过的云    时间: 2015-5-19 00:16
对了 第二步,静态代码块如果初始化了 类中的属性,那么 后面的每一步都无法再对该属性进行初始化,并且该属性的值会随着类的存在而存在,直到 垃圾处理器将其 从内存中回收,该属性才消失。
作者: 唐僧    时间: 2015-5-19 00:54
路过,附上一张初始化示意图

对象的初始化过程图解 (2).jpg (99.64 KB, 下载次数: 15)

始化图

始化图





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