📅  最后修改于: 2020-03-22 13:14:45             🧑  作者: Mango
在Java程序中,可以在方法,构造函数和初始化块上执行操作。实例初始化块或IIB用于初始化实例变量。IIB在构造函数之前执行。它们每次在创建类的对象时运行。
// Java程序展示实例初始化块(IIB)
class GfG
{
// 实例初始化块
{
System.out.println("IIB块");
}
// GfG的构造函数
GfG()
{
System.out.println("构造器被调用");
}
public static void main(String[] args)
{
GfG a = new GfG();
}
}
输出:
IIB块
构造器被调用
我们也可以在一个类中有多个IIB。如果编译器找到多个IIB,则它们都将自上而下执行,即,将首先执行写在顶部的IIB。
// Java代码展示多个IIB
class GfG
{
// IIB1
{
System.out.println("IIB1");
}
// IIB2
{
System.out.println("IIB2");
}
// 构造函数
GfG()
{
System.out.println("构造器被调用");
}
// IIB3
{
System.out.println("IIB3");
}
// main函数
public static void main(String[] args)
{
GfG a = new GfG();
}
}
输出:
IIB1
IIB2
IIB3
构造器被调用
具有父类的实例初始化块
您也可以在父类中拥有IIB。实例初始化块代码在构造函数中调用super()之后立即运行。编译器在执行当前类的IIB之前执行父类的IIB。对下面的例子来看看。
// Java代码,展示父类IIB
class B
{
B()
{
System.out.println("B构造函数");
}
{
System.out.println("B-IIB");
}
}
// 子类
class A extends B
{
A()
{
super();
System.out.println("A构造函数");
}
{
System.out.println("A-IIB");
}
// main函数
public static void main(String[] args)
{
A a = new A();
}
}
输出:
B-IIB
B-构造函数
A-IIB block
A-构造函数
在上面的示例中,当创建类A的对象时,编译器将尝试执行类A的构造函数。但是它会找到super()语句,并首先执行父类构造函数。
重要事项:
参考:
Java中的初始化程序块