Java 实例初始化程序块

实例初始化程序块是在 class 来初始化实例数据成员。实例初始化块为每个对象执行一次,可用于设置实例变量的初始值。

实例初始化块类似于Java 构造函数,但其执行和使用不同。

Java 实例初始化程序块示例

此示例演示实例初始化程序Java 中的块:

public class Tester {
   public int a;
   { a = 10; }   
} 

实例初始化块的特性

  • 实例初始化块在创建对象后被调用。

  • 在调用对象的任何构造函数之前调用实例初始化程序块。

  • 对于子类,实例初始化程序块块将在超类构造函数调用后调用。

  • 实例初始值设定项块可用于执行多个语句。

  • 实例初始化块通常用于实例化多个值字段,如数组。

实例初始化块的使用

以下是实例初始化块的使用Java:

  • 初始化实例变量。
  • 初始化代码中使用的资源。
  • 执行实例变量的动态初始化.
  • 对多个构造函数使用通用初始化逻辑。

Java 实例初始化块:更多示例

示例 1:演示首先调用什么、实例初始化块或构造函数

在此示例中,我们展示了实例初始化块在对象构造函数之前执行。使用 new 运算符创建对象时,会调用实例初始化块和构造函数。

package com.yxjc123;
public class Tester {
   {
      System.out.println("Inside instance initializer block");
   }
   
   Tester(){
      System.out.println("Inside constructor");
   }
   
   public static void main(String[] arguments) {
      Tester test = new Tester();
   }
} 

输出

60
150 

示例 2:演示构造函数是否覆盖实例初始化块

在此示例中,我们展示了实例初始化程序块中初始化的值被对象构造函数覆盖。使用 new 运算符创建对象时,会调用实例初始化块和构造函数。

package com.yxjc123;
public class Tester {
   int a;
   {
      System.out.println("Inside instance initializer block");
      a = 10;
   }
   
   Tester(){
      System.out.println("Inside constructor");
      a = 20;
   }
   
   public static void main(String[] arguments) {
      Tester test = new Tester();
      System.out.println("Value of a: " + a);
   }
} 

输出

Inside instance initializer block
Inside constructor
Value of a: 20 

示例 3:实例初始化块和超级构造函数

在这个例子中,我们展示了在子实例初始化块之前调用超级构造函数。我们创建了一个 SuperTester 类,并且 Tester 类扩展了该类。在 main() 方法中,我们打印实例变量的值。在输出中,您可以验证调用的块的顺序。第一个超级构造函数被调用。然后调用子实例初始化程序来初始化实例变量,然后调用子类的构造函数。

package com.yxjc123;
class SuperTester{
   SuperTester(){
      System.out.println("Inside super constructor");
   }
}

public class Tester extends SuperTester {
   int a;
   {
      System.out.println("Inside instance initializer block");
      a = 10;
   }

   Tester(){
      System.out.println("Inside constructor");
   }

   public static void main(String[] arguments) {
      Tester test = new Tester();
      System.out.println("Value of a: " + test.a);
   }
} 

输出

Inside super constructor
Inside instance initializer block
Inside constructor
Value of a: 10