Java 构造方法怎么写?入门易错点

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

Java 构造方法是用来创建对象时初始化状态的特殊方法,名字必须和类名完全一致,没有返回类型(连 void 都不能写),这点最容易出错。

构造方法的基本写法

语法很简单:访问修饰符 + 类名 + 括号(可带参数)+ 方法体。

  • 必须和类名大小写完全一致,比如类叫 Person,构造方法就得叫 Person,写成 personPERSON 就是普通方法,不是构造方法
  • 不能写返回类型,哪怕写 void Person() { } 也会被编译器当成普通方法,导致新建对象时无法调用、甚至出现“找不到构造方法”的错误
  • 可以重载:一个类里可以有多个构造方法,只要参数列表不同(类型、个数、顺序)

默认构造方法容易被忽略

当你没写任何构造方法时,Java 会自动加一个无参、空实现、public 的默认构造方法。但只要你写了任意一个构造方法(哪怕只有一个带参的),这个默认的就没了。

  • 后果:如果其他代码(比如某些框架、反射、子类 super() 调用)依赖无参构造,就会编译或运行报错
  • 建议:显式写上 public 类名() { },尤其在需要序列化、ORM 映射或继承时

常见新手错误场景

这些坑几乎每个初学者都踩过:

  • 把构造方法写成 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 类名(...) 测试下能不能正常创建对象,再打个断点看看字段有没有按预期初始化。