MENU

Java-36 属性初始化顺序

October 9, 2023 • Read: 68 • Java阅读设置

面向对象编程

属性初始化顺序

1 属性初始化的情况

1) 默认初始化
2) 显式初始化
3) 构造器初始化
4) 调用初始化
5) 代码块初始化

2 属性初始化的顺序

1) 针对对象的属性初始化,不同情况的属性初始化顺序:
默认初始化 - 显式初始化 or 代码块初始化 - 构造器初始化 - 调用初始化

2) 理解

  • 默认初始化:理解为为类或对象开辟空间(包括各个成员的空间)时进行的属性初始化;
  • 显式初始化 or 代码块初始化:理解为类或对象开辟空间后加载(各个成员)具体内容时的属性初始化;
    因此,显式初始化与代码块初始化的顺序取决于二者的加载顺序,也就是说,在类中代码块初始化定义在显式初始化之前,则先代码块初始化,否则先显式初始化。
    但一般也不会在类中先写代码块初始化后写显式初始化。
    2023-10-09T13:27:57.png
    2023-10-09T13:28:08.png
    2023-10-09T13:28:31.png
    2023-10-09T13:28:46.png
  • 构造器初始化:一方面,静态代码块随类加载而加载,而构造器中的初始化依赖于对象的创建,因此静态代码块的属性初始化一定先于构造器中的属性初始化;
    另一方面,构造器初始化时,经历的过程仍然是先开辟对象空间,再加载对象具体内容,最后再进行构造器内部的初始化代码。也就是说,构造器初始化本质上仍是调用初始化,只不过是在对象创建完成后马上进行调用。
    因此,构造器初始化后于显式初始化和代码块初始化。
  • 调用初始化:调用依赖于先有类或对象,因此针对对象属性初始化,调用初始化后于构造器初始化。
Last Modified: October 16, 2023