构造代码块你用对了吗

含义

构造代码块(也称为初始化块)是放在类中的一段代码块,用{ } 进行包裹,位于类的成员变量和方法之间,用于完成初始化操作,通常和构造方法一起使用,执行于构造方法之前。

静态构造代码块整个生命阶段只运行一次——类加载阶段;

非静态构造代码块整个生命阶段至少运行一次,每当有类的实例被创建时非静态代码块就会运行一次;

构造代码块最佳实践

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

  

posted @ 2023-04-19 20:06  HexThinking  阅读(19)  评论(0编辑  收藏  举报