Java 实例初始化器块

Java 实例初始化器块

原文: https://howtodoinjava.com/oops/java-instance-initializer/

Java 实例初始化器是在执行构造器代码之前执行的代码块。 每当我们创建一个新对象时,这些初始化器就会运行。

1. 实例初始化语法

使用大括号创建实例初始化器块。 对象初始化语句写在括号内。

public class DemoClass {

    //This is initializer block 1
    {
      //statements
    }

    //This is initializer block 2
    {
      //statements
    }
}

2. Java 实例初始化器特性

实例初始化器具有以下特性。

  • 我们可以在一个类中定义多个初始化器
  • 所有初始化器将按顺序执行,以使其出现在类主体中。
  • 初始化器在调用父类构造器之后,在执行子类构造器之前运行。 请注意,如果我们未在子类的构造器中显式提供第一条语句,则 Java 会插入父类super()的默认构造器。
  • 在完成所有初始化器后,将执行构造器的语句。
  • 我们可以在初始化器中使用此类和父类的构造器的调用。

3. Java 实例初始化序列流程

基于以上给出的特性,让我们概述一下对象的实例初始化如何进行。

  1. 子类构造器被调用。
  2. 子类构造器的第一个语句为super()(或提供的显式构造器),因此将调用父类构造器。
  3. 父类的初始化器按其出现顺序执行。
  4. 父类构造器语句被执行。
  5. 子类的初始化器按其出现顺序执行。
  6. 子类构造器语句被执行。

4. Java 实例初始化器示例

让我们快速看一个示例,以演示以上理论。

public class ParentClass 
{ 
  public ParentClass() 
  {
    System.out.println("In ParentClass Constructor");
  }

  //Instance Initializer
  {
    System.out.println("In ParentClass Instance Initializer");
  }
}

public class ChildClass extends ParentClass 
{
  public ChildClass() 
  {
    super();  //If not provided, JVM will insert it
    System.out.println("In ChildClass Constructor");
  }

  //Instance Initializer 1
  { 
    System.out.println("In ChildClass Instance Initializer 1");
  }

  //Instance Initializer 2
  {
    System.out.println("In ChildClass Instance Initializer 2");
  }
}

public class Main 
{
  public static void main(String[] args) 
  {
    ChildClass childObj = new ChildClass();
  }
}

程序输出。

In ParentClass Instance Initializer
In ParentClass Constructor
In ChildClass Instance Initializer 1
In ChildClass Instance Initializer 2
In ChildClass Constructor

学习愉快!