内存初始化顺序
new操作符内部和构造函数是像下面这样交互的。new操作符从内存管理器获取“空白”内存,按如下顺序初始化这块内存。调用构造函数时,将对“空白”内存的引用作为隐式的this参数传给构造函数。构造函数链剩余的部分开始执行,在构造函数之间传递引用。这些构造函数都没有返回类型(行为都像是返回void)。构造函数链上的执行结束后,new操作符返回内存的引用。现在,该引用指向的内存处于完成初始化的形式。
构造某个类型的首个实例时由先到后系统所做的工作:
执行静态变量初始化
- 把存放静态变量的空间清零
- 执行静态变量的初始化语句(声明时直接初始化)
执行静态构造函数
- 执行基类的静态构造函数
- 执行本类的静态构造函数
执行实例变量初始化
- 把存放实例变量的空间清零
- 执行实例变量的初始化语句(声明时直接初始化)
执行实例构造函数
- 执行基类的实例构造函数
- 执行本类的实例构造函数
执行对象初始化器
- 执行对象初始化器,集合初始化程序