You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java默认提供无参构造,为何仍需手动实现noArgsConstructor?

Java无参构造方法常见疑问解答

一、为什么明明有默认无参构造,还要手动实现?

Java编译器只会给完全没定义任何构造方法的类自动生成默认无参构造。但只要你手动写了任意一个构造方法(比如带参数的),编译器就不会再自动生成无参构造了。这时候如果遇到以下场景,就必须手动加无参构造:

  • 像ORM框架(比如JPA)、序列化工具(比如Jackson)这类工具,需要通过反射创建对象,必须依赖无参构造
  • 子类继承这个类时,如果子类构造没显式调用父类的有参构造,编译器会默认去调父类无参构造,要是父类没有,直接编译报错
  • 业务代码里需要用new 类名()的方式创建实例,而不是每次都传参数

二、Spring Boot里只写有参构造会报错的原因

Spring Boot很多核心操作都依赖无参构造:

  • Bean创建:Spring容器默认用反射调用无参构造来生成Bean实例(比如@Component、@Service、@Entity标记的类),要是类只有有参构造,Spring找不到无参的,就会抛出实例化失败的异常
  • JSON处理:Spring Boot默认用Jackson处理JSON请求和响应,Jackson把JSON转成POJO的时候,默认得用无参构造创建对象,没有的话会直接报映射错误

三、自己创建POJO实例时报错的原因

当你给POJO写了有参构造后,默认的无参构造就被“覆盖”了——编译器不再自动生成它。这时候你再尝试用new POJO()创建实例,编译器会提示找不到这个构造方法,因为它根本不存在了。要么你每次创建都传对应参数调用有参构造,要么手动给POJO加上无参构造才能解决。

内容的提问来源于stack exchange,提问作者Ananthu K Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:58:15