Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络编程

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java APIs 和框架

Java 类引用

Java 有用资源

Java - 实例初始化块



Java 实例初始化块

实例初始化块是在内部声明的一段代码块,用于初始化实例数据成员。实例初始化块为每个对象执行一次,可用于设置实例变量的初始值。

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

Java 实例初始化块示例

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

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

实例初始化块的特性

  • 创建对象后,会调用一次实例初始化块。

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

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

  • 实例初始化块可用于执行多个语句。

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

实例初始化块的用途

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

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

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

示例 1:演示首先调用的是实例初始化块还是构造函数

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

package com.tutorialspoint;
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.tutorialspoint;
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.tutorialspoint;
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
广告