构造代码块你用对了吗
含义
构造代码块(也称为初始化块)是放在类中的一段代码块,用{ } 进行包裹,位于类的成员变量和方法之间,用于完成初始化操作,通常和构造方法一起使用,执行于构造方法之前。
静态构造代码块整个生命阶段只运行一次——类加载阶段;
非静态构造代码块整个生命阶段至少运行一次,每当有类的实例被创建时非静态代码块就会运行一次;
构造代码块最佳实践
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