构造代码块你用对了吗
含义
构造代码块(也称为初始化块)是放在类中的一段代码块,用{ } 进行包裹,位于类的成员变量和方法之间,用于完成初始化操作,通常和构造方法一起使用,执行于构造方法之前。
静态构造代码块整个生命阶段只运行一次——类加载阶段;
非静态构造代码块整个生命阶段至少运行一次,每当有类的实例被创建时非静态代码块就会运行一次;
构造代码块最佳实践
1.对象属性的默认初始化
对象属性的初始化应该在构造方法中进行。如果有必要,在构造代码块中也可以进行一些对象属性的默认初始化(例如声明一个 List 属性,并在构造代码块中给它赋初值)。
public class MyClass {
private List<String> myList;
// 构造代码块中对 myList 进行默认初始化
{
this.myList = new ArrayList<>()
}
// 构造方法中赋初值
public MyClass() {
this.myList.add("default");
}
}
2.可以将多个构造方法中相同的初始化逻辑提取到构造代码块中
可以将多个构造方法中相同的初始化逻辑提取到构造代码块中,避免出现重复代码。这样不仅可以提高代码的复用性,还能使代码更加清晰简洁。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class MyClass { private int num; // 默认构造方法 public MyClass() {} // 带参数的构造方法 public MyClass( int num) { this .num = num; } // 构造代码块中初始化 num 的默认值 { this .num = 0 ; } } |
3.构造代码块必须被子类继承,无法被重写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix