楼主,你看下这个是毕老师的板书
15,对象初始化过程
Person p = new Person("zhengsan", 20);
(1)首先,因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中
(2)执行该类中的static代码块,如果有的话,给Person.class类进行初始化
(3)在堆内存中开辟空间,分配内存地址
(4)在堆内存中建立对象的特有属性,并进行默认初始化
(5)对属性进行显示初始化
(6)对对象进行构造代码块初始化
(7)对对象进行对应的构造代码(构造函数)初始化
(8)讲内存地址付给栈内存中的p变量
通过这个对象的初始化过程你会发现,在初始化的过程中,静态代码块和构造代码块所处的位置是不同的,如果要执行的代码要在(3)(4)(5)之前,就用静态代码块,如果在(3)(4)(5)之后而在构造函数之前,则用构造代码块。
以上是我的理解,我也不是特别明白,毕竟没有例子。。。
这块儿涉及到内存的相关问题,不好理解啊,遗忘速度太快了
|