Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

构造器、构造器重载和复制构造器是什么?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

构造器用于初始化新实例,没有返回类型,名字与类名相同。一个类可按不同参数列表声明多个构造器,这叫构造器重载。所谓复制构造器通常只是接收同类型对象的普通构造器;Java 不会自动生成 C++ 式的复制构造器,也不会替你决定复制深度。

讲清原理

构造器应让对象在交付给调用方时满足必要约束。多个入口可以通过 this 调用汇合,避免把校验逻辑复制多份。Java 21 的显式 this/super 构造器调用必须位于构造器体第一条语句,不能套用更新版本的扩展规则。

复制引用字段时,要判断是否允许共享。String 等不可变值常可共享,可变数组则可能需要复制;复制一个外层对象不代表整个对象图都已独立。

构造器逐层委托,父类实例部分先完成,再执行子类初始化与构造器体
构造器逐层委托,父类实例部分先完成,再执行子类初始化与构造器体

例子与易错点

class Name {
    final String value;
    Name() { this("未命名"); }
    Name(String value) { this.value = value; }
    Name(Name other) { this(other.value); }
}
Name a = new Name("小林");
Name b = new Name(a);
System.out.println(b.value + ":" + (a == b)); // 小林:false

这里两个 Name 实例不同,但共享同一个不可变字符串值。构造器不是普通方法,不能写 void,也不能被子类重写。

相关题:第 27 题、第 29 题、第 38 题、第 41 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。