首先,要理解什么是初始化。
所谓初始化,就是把变量赋予默认值。
也就是当程序员没有给变量赋值的时候,java赋予其默认值。
(eg:比如没写构造方法,java默认了一个空的构造方法一样。这叫默认初始化而若写了构造方法,则叫显示初始化。虽这里举例是构造方法,但属性亦然。
比如你int a; String b; 没赋值,默认初始化为0和null,赋值了则为显示初始化。但其具体的执行顺序则如下)
下面写目前所学习和知道的执行顺序:
1.new了某类的新对象的时候,某类先出现存在,故第一步先把某类从硬盘上加载到内存;
2.第二步执行static静态代码块(因为其随着类加载就开始执行了);
3.静态成员(static静态属性和方法)和普通方法也加载进来;
(是加载,执行不执行要看是否调用)
4.在堆内存中为某类new的对象内容开辟一块区域,并为其分配内存地址;
5.在堆内存里建立对象的特有属性,并对特有属性默认初始化;
6.对属性进行显示初始化;
7.执行构造代码块,对某类的所有对象初始化;
8.执行对应的构造方法,对特定对象进行初始化(未赋的默认初始化,赋了的显示初始化);
9.把某类的特定对象的内存地址给对象名;
(这就是之前说的为什么栈区索引目录,堆区内容的缘由;对象名就是对应一个内存地址
eg. Person one=new Person();
one是对象,one在栈里的,它在栈里的只是一个名,有个内存地址对应着,才能通过one的名访问堆里的one的特有内容。为什么说特有,因为有static的存在(若不懂参考《javaSE之static关键字之共享数据》))