Java 中的实例初始化块

2025年3月30日 | 阅读 3 分钟
实例初始化块用于初始化实例数据成员。每次创建类的对象时都会运行它。
实例变量的初始化可以直接完成,但在实例初始化块中初始化实例变量时可以执行额外的操作。

问) 为什么需要实例初始化块,而我们可以直接在实例数据成员中赋值?例如

为什么要使用实例初始化块?

假设我需要在为实例数据成员赋值时执行一些操作,例如使用 for 循环填充复杂数组或进行错误处理等。

实例初始化块的示例

让我们看一个简单的实例初始化块示例,它执行初始化。
Output:speed is 100
       speed is 100
 
在 Java 中,您可以在三个地方执行操作
  1. 方法
  2. 构造函数

先调用实例初始化块还是构造函数?

Output:instance initializer block invoked
       constructor is invoked
       instance initializer block invoked
       constructor is invoked
在上面的示例中,似乎首先调用了实例初始化块,但事实并非如此。实例初始化块在对象创建时被调用。Java 编译器在 Java 编译器 将实例初始化块复制到构造函数中,放在第一个语句 super() 之后。因此,首先调用构造函数。让我们通过下面的图来理解它。

注意:Java 编译器会将实例初始化块的代码复制到每个构造函数中。

instance initializer block

实例初始化块的规则

实例初始化块主要有三条规则。它们如下:
  1. 创建类的实例时创建实例初始化块。
  2. 在调用父类构造函数之后(即在调用 super() 构造函数之后)调用实例初始化块。
  3. 实例初始化块按照它们出现的顺序排列。

实例初始化块的程序,它在 super() 之后调用

Output:parent class constructor invoked
       instance initializer block is invoked
       child class constructor invoked

另一个实例块的示例

       parent class constructor invoked
       instance initializer block is invoked
       child class constructor invoked
       parent class constructor invoked
       instance initializer block is invoked
       child class constructor invoked 10
下一个主题Final-keyword-in-java