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 实例初始化序列流程
基于以上给出的特性,让我们概述一下对象的实例初始化如何进行。
- 子类构造器被调用。
- 子类构造器的第一个语句为
super()
(或提供的显式构造器),因此将调用父类构造器。 - 父类的初始化器按其出现顺序执行。
- 父类构造器语句被执行。
- 子类的初始化器按其出现顺序执行。
- 子类构造器语句被执行。
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
学习愉快!