Java构造方法用于对象初始化,名称须与类名完全一致且无返回类型;可重载,但显式定义后默认无参构造将消失;常见错误包括误写void、参数赋值颠倒、过早调用可重写方法等。

Java 构造方法是用来创建对象时初始化状态的特殊方法,名字必须和类名完全一致,没有返回类型(连 void 都不能写),这点最容易出错。
构造方法的基本写法
语法很简单:访问修饰符 + 类名 + 括号(可带参数)+ 方法体。
- 必须和类名大小写完全一致,比如类叫
Person,构造方法就得叫Person,写成person或PERSON就是普通方法,不是构造方法 - 不能写返回类型,哪怕写
void Person() { }也会被编译器当成普通方法,导致新建对象时无法调用、甚至出现“找不到构造方法”的错误 - 可以重载:一个类里可以有多个构造方法,只要参数列表不同(类型、个数、顺序)
默认构造方法容易被忽略
当你没写任何构造方法时,Java 会自动加一个无参、空实现、public 的默认构造方法。但只要你写了任意一个构造方法(哪怕只有一个带参的),这个默认的就没了。
- 后果:如果其他代码(比如某些框架、反射、子类
super()调用)依赖无参构造,就会编译或运行报错 - 建议:显式写上
public 类名() { },尤其在需要序列化、ORM 映射或继承时
常见新手错误场景
这些坑几乎每个初学者都踩过:
立即学习“Java免费学习笔记(深入)”;
-
把构造方法写成 void:比如
public void Student(String name) { ... }→ 编译通过,但这是普通方法,new Student("张三")会调不到它 -
参数赋值写反了:比如
this.name = name;写成name = this.name;→ 字段没被初始化,还是 null - 在构造方法里调用可被重写的方法(如非 private / final 方法)→ 子类对象还没构造完,可能引发空指针或逻辑异常
- 构造方法里抛出异常但没处理:比如读文件失败,没加 try-catch 或 throws,会导致 new 表达式直接失败
小技巧:用 this(...) 复用构造逻辑
多个构造方法有重复初始化代码时,可以用 this(...) 调用本类其他构造方法,但必须是第一行语句。
- 例如:
public Person() { this("未知"); }和public Person(String name) { this.name = name; } - 注意:
this(...)和super(...)不能共存,也不能出现在第二行以后
基本上就这些,不复杂但容易忽略细节。写完构造方法,记得用 new 类名(...) 测试下能不能正常创建对象,再打个断点看看字段有没有按预期初始化。










