# Java 实例初始化器块

> 原文： [https://howtodoinjava.com/oops/java-instance-initializer/](https://howtodoinjava.com/oops/java-instance-initializer/)

**Java 实例初始化器**是在执行[构造器](https://howtodoinjava.com/oops/java-constructors/)代码之前执行的代码块。 每当我们创建一个新对象时，这些初始化器就会运行。

## 1\. 实例初始化语法

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

```java
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 实例初始化器示例

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

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

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

```

```java
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");
  }
}

```

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

```

程序输出。

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

```

学习愉快！