✅为什么建议自定义一个无参构造函数

典型回答

Java中的构造函数分为无参和有参。

public class Person {
    private String name;
    private int age;

    // 无参构造器
    public Person() {
        this.name = "Unknown";
        this.age = 0;
    }

    // 有参构造器
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // ...其他方法...
}

不管有参还是无参,都是为了做对象的初始化的。无参的就是给对象的成员变量设置默认值。有参的就是根据我们的参数进行初始化。

如果没有显示定义任何构造函数,会自动添加一个无参构造函数。但是如果已经定义过构造函数,那么就不会默认添加了。

定义一个无参构造函数(也称为默认构造器)通常被认为是Java编程中的一种好习惯,虽然如果我们没定义,JDK会帮我自动生成一个,但是如果我们自己定义了一个有参的构造函数,那么就不会自动帮我们生成无参构造函数了,而没有无参构造函数会带来一系列问题

1.反射及序列化要求

在使用Java反射或者序列化/反序列化时,经常是调用类的无参构造函数进行对象创建的。


2. 兼容性和可扩展性


许多Java框架和库,如Spring、Hibernate、Jackson等,在进行对象的创建和初始化时,依赖于类的无参构造器。如果没有定义无参构造器,这些框架可能无法正常工作。

3. JavaBean规范

根据JavaBean规范,一个标准的JavaBean必须拥有一个公共的无参构造器。这使得JavaBean可以被实例化,并且其属性可以通过反射机制被外部访问和修改。

4. 子类构造器的默认行为

在Java中,子类构造器默认会调用父类的无参构造器。如果父类没有定义无参构造器,而子类又没有显式调用父类的其他构造器,这将导致编译错误。

原文: https://www.yuque.com/hollis666/xkm7k3/ggblti0p753ht8ny