【Java】基础概念-构造函数详解
一、前言
看09 可变的数据:不要让你的代码“失控”中的内容有,要求要消除setter,setter 是完全没有必要存在的。消除 setter ,有一种专门的重构手法,叫做移除设值函数(Remove Setting Method)。为了解决可变数据,还有一个解决方案是编写不变类。
在实际工作中,我们怎么设计不变类呢?要做到以下三点:
1. 所有的字段只在构造函数中初始化;
2. 所有的方法都是纯函数;
3. 如果需要有改变,返回一个新的对象,而不是修改已有字段。
回过头来看我们之前改动的“用构造函数消除 setter”的代码,其实就是朝着这个方向在迈进。
二、什么是构造函数
构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。
三、 构造函数特点
1.构造函数的命名必须和类名完全相同。在java中普通函数可以和构造函数同名,但是必须带有返回值;
2.构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的;
3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;
4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的。而一般的方法不存在这一特点;
5.构造函数有回滚的效果,构造函数抛出异常时,构造的是一个不完整对象,会回滚,将此不完整对象的成员释放(c++)
6.当一个类只定义了私有的构造函数,将无法通过new关键字来创建其对象,当一个类没有定义任何构造函数,C#编译器会为其自动生成一个默认的无参的构造函数
✅ Java 构造函数必须具备的全部特征:
特征 | 要求 | 示例 |
方法名 | 必须与类名完全一致 |
|
返回值类型 | 不能写任何返回值类型,连 | ❌ |
作用 | 在 |
|
修饰符 | 可以是 |
|
可重载 | 一个类可以有多个构造函数,参数不同即可 |
|
✅ 总结一句话(背下来):
构造函数 = 类名 + 无返回值类型 + 用于初始化对象的特殊方法。
四、适用场景
在 Java 中,构造函数通常写在实体类(Entity 类)中,尤其是无参构造和全参构造都要提供,方便框架和开发者使用,这是最常见也是最推荐的做法。
五、参考资料
- 构造函数_百度百科
- 09 可变的数据:不要让你的代码“失控”