Java instance initializers是在constructor代码执行之前执行的代码块。 每当我们创建一个新对象时,这些初始化程序就会运行。
1. Instance initializer syntax
使用curly braces创建实例初始化程序块。 对象初始化语句写在括号内。
public class DemoClass {
//This is initializer block 1
{
//statements
}
//This is initializer block 2
{
//statements
}
}
2. Java instance initializer features
实例初始化器具有以下功能。我们可以在一个类中定义multiple initializers 。
所有初始化程序将按顺序执行,以使其出现在类主体中。
初始化程序在调用父类构造函数之后,在执行子类构造函数之前运行。 请注意,如果我们未在子类的构造函数中显式提供first statement ,则Java会插入父类super()的默认构造函数。
执行完所有初始化程序后,将执行构造函数的语句。
我们可以在初始化器中使用此类和父类的构造函数的调用。
3. Java instance initialization sequence flow
基于以上给出的功能,让我们概述一下对象的实例初始化如何进行。子类构造函数被调用。
子类构造函数的第一条语句为super() (或提供的显式构造函数),因此将调用父类构造函数。
父类的初始化程序按其出现顺序执行。
父类构造函数语句被执行。
子类的初始化程序按其出现顺序执行。
子类构造函数语句被执行。
4. Java instance initializer example
让我们快速地看一个演示以上理论的例子。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();
}
}
Program output.In ParentClass Instance Initializer
In ParentClass Constructor
In ChildClass Instance Initializer 1
In ChildClass Instance Initializer 2
In ChildClass Constructor