构造代码块你用对了吗
含义
构造代码块(也称为初始化块)是放在类中的一段代码块,用{ } 进行包裹,位于类的成员变量和方法之间,用于完成初始化操作,通常和构造方法一起使用,执行于构造方法之前。
静态构造代码块整个生命阶段只运行一次——类加载阶段;
非静态构造代码块整个生命阶段至少运行一次,每当有类的实例被创建时非静态代码块就会运行一次;
构造代码块最佳实践
1.对象属性的默认初始化
对象属性的初始化应该在构造方法中进行。如果有必要,在构造代码块中也可以进行一些对象属性的默认初始化(例如声明一个 List 属性,并在构造代码块中给它赋初值)。
public class MyClass {
private List<String> myList;
// 构造代码块中对 myList 进行默认初始化
{
this.myList = new ArrayList<>()
}
// 构造方法中赋初值
public MyClass() {
this.myList.add("default");
}
}
2.可以将多个构造方法中相同的初始化逻辑提取到构造代码块中
可以将多个构造方法中相同的初始化逻辑提取到构造代码块中,避免出现重复代码。这样不仅可以提高代码的复用性,还能使代码更加清晰简洁。
public class MyClass {
private int num;
// 默认构造方法
public MyClass() {}
// 带参数的构造方法
public MyClass(int num) {
this.num = num;
}
// 构造代码块中初始化 num 的默认值
{
this.num = 0;
}
}
3.构造代码块必须被子类继承,无法被重写
public class ParentClass {
// 父类的构造代码块
{
System.out.println("ParentClass constructor block");
}
}
public class ChildClass extends ParentClass {
// 子类重写了父类的构造代码块
{
System.out.println("ChildClass constructor block");
}
}
public static void main(String[] args) {
new ChildClass();
}
// 输出结果:
// ParentClass constructor block
// ChildClass constructor block

浙公网安备 33010602011771号