【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 构造函数必须具备的全部特征:

特征要求示例
方法名必须与类名完全一致class Person { Person() { } }
返回值类型不能写任何返回值类型,连 void 也不行❌ public void Person() 是错误写法
作用在 new 创建对象时自动调用,用于初始化对象Person p = new Person("Alice");
修饰符可以是 public、protected、private 或默认private Person() { } 也是合法构造
可重载一个类可以有多个构造函数,参数不同即可Person() 和 Person(String name) 共存

✅ 总结一句话(背下来):
构造函数 = 类名 + 无返回值类型 + 用于初始化对象的特殊方法。
四、适用场景
        在 Java 中,构造函数通常写在实体类(Entity 类)中,尤其是无参构造和全参构造都要提供,方便框架和开发者使用,这是最常见也是最推荐的做法。

五、参考资料
构造函数_百度百科
09 可变的数据:不要让你的代码“失控”

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值