Java 实例初始化程序块
实例初始化程序块是在 class 来初始化实例数据成员。实例初始化块为每个对象执行一次,可用于设置实例变量的初始值。
实例初始化块类似于Java 构造函数,但其执行和使用不同。
Java 实例初始化程序块示例
此示例演示实例初始化程序Java 中的块:
public class Tester {
public int a;
{ a = 10; }
}
实例初始化块的特性
实例初始化块在创建对象后被调用。
在调用对象的任何构造函数之前调用实例初始化程序块。
对于子类,实例初始化程序块块将在超类构造函数调用后调用。
实例初始值设定项块可用于执行多个语句。
实例初始化块通常用于实例化多个值字段,如数组。
实例初始化块的使用
以下是实例初始化块的使用Java:
- 初始化实例变量。
- 初始化代码中使用的资源。
- 执行实例变量的动态初始化.
- 对多个构造函数使用通用初始化逻辑。
Java 实例初始化块:更多示例
示例 1:演示首先调用什么、实例初始化块或构造函数
在此示例中,我们展示了实例初始化块在对象构造函数之前执行。使用 new 运算符创建对象时,会调用实例初始化块和构造函数。
package com.yxjc123;
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();
}
}
输出
60
150
示例 2:演示构造函数是否覆盖实例初始化块
在此示例中,我们展示了实例初始化程序块中初始化的值被对象构造函数覆盖。使用 new 运算符创建对象时,会调用实例初始化块和构造函数。
package com.yxjc123;
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: " + a);
}
}
输出
Inside instance initializer block
Inside constructor
Value of a: 20
示例 3:实例初始化块和超级构造函数
在这个例子中,我们展示了在子实例初始化块之前调用超级构造函数。我们创建了一个 SuperTester 类,并且 Tester 类扩展了该类。在 main() 方法中,我们打印实例变量的值。在输出中,您可以验证调用的块的顺序。第一个超级构造函数被调用。然后调用子实例初始化程序来初始化实例变量,然后调用子类的构造函数。
package com.yxjc123;
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