实例初始化块是在类内部声明的一段代码,用于初始化实例数据成员。每次创建对象时,实例初始化块都会被执行一次,可以用来设置实例变量的初始值。
实例初始化块与 Java 构造函数类似,但它们的执行和用途有所不同。
Java 实例初始化块示例
下面是一个简单的实例初始化块示例:
public class Tester {
public int a;
{
a = 10;
}
}
这个示例展示了如何在类内部定义一个实例初始化块来为实例变量 a
设置初始值。
实例初始化块的特点
-
-
-
在子类的情况下,在调用完超类的构造函数之后,实例初始化块会被调用。
-
-
实例初始化块的用途
以下是实例初始化块的一些用途:
更多的 Java 实例初始化块示例
示例 1:演示实例初始化块和构造函数哪个先执行
在这个例子中,我们展示了实例初始化块在对象构造函数之前被执行的情况。当使用 new
操作符创建对象时,实例初始化块和构造函数都会被调用。
package com.tutorialspoint;
public class Tester {
{
System.out.println("Inside instance initializer block");
}
Tester(){
System.out.println("Inside constructor");
}
public static void main(String[] arguments) {
Tester test = new Tester();
}
}
输出:
Inside instance initializer block
Inside constructor
示例 2:演示构造函数是否覆盖实例初始化块
在这个例子中,我们展示了在实例初始化块中初始化的值被对象构造函数覆盖的情况。当使用 new
操作符创建对象时,实例初始化块和构造函数都会被调用。
package com.tutorialspoint;
public class Tester {
int a;
{
System.out.println("Inside instance initializer block");
a = 10;
}
Tester(){
System.out.println("Inside constructor");
a = 20;
}
public static void main(String[] arguments) {
Tester test = new Tester();
System.out.println("Value of a: " + test.a);
}
}
输出:
Inside instance initializer block
Inside constructor
Value of a: 20
示例 3:实例初始化块与超类构造函数
在这个例子中,我们展示了超类构造函数在子类实例初始化块之前被调用的情况。我们创建了一个 SuperTester
类,而 Tester
类扩展了这个类。在 main()
方法中,我们打印实例变量的值。从输出中可以验证被调用的块的顺序。首先调用的是超类构造函数,然后是子类的实例初始化块,最后是子类的构造函数。
package com.tutorialspoint;
class SuperTester{
SuperTester(){
System.out.println("Inside super constructor");
}
}
public class Tester extends SuperTester {
int a;
{
System.out.println("Inside instance initializer block");
a = 10;
}
Tester(){
System.out.println("Inside constructor");
}
public static void main(String[] arguments) {
Tester test = new Tester();
System.out.println("Value of a: " + test.a);
}
}
输出:
Inside super constructor
Inside instance initializer block
Inside constructor
Value of a: 10
以上示例展示了实例初始化块的基本用法以及它们在对象生命周期中的执行顺序。