当前位置: 首页 > news >正文

【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");

修饰符

可以是 publicprotectedprivate 或默认

private Person() { } 也是合法构造

可重载

一个类可以有多个构造函数,参数不同即可

Person()Person(String name) 共存

总结一句话(背下来):

构造函数 = 类名 + 无返回值类型 + 用于初始化对象的特殊方法。

四、适用场景

        在 Java 中,构造函数通常写在实体类(Entity 类)中,尤其是无参构造和全参构造都要提供,方便框架和开发者使用,这是最常见也是最推荐的做法。

五、参考资料

  1. 构造函数_百度百科
  2. 09 可变的数据:不要让你的代码“失控”
http://www.dtcms.com/a/300327.html

相关文章:

  • [Python] -进阶理解7- Python中的内存管理机制简析
  • 基于springboot的在线数码商城/在线电子产品商品销售系统的设计与实现
  • (二)使用 LangChain 从零开始构建 RAG 系统 RAG From Scratch
  • 7月26号打卡
  • Unity GenericMenu 类详解
  • 技术 — 资本双螺旋:AI 时代的投资浪潮与技术突破
  • 模型训练部署流程
  • 电磁兼容三:电磁干扰三要素详解
  • 【大模型框架】LangChain入门:从核心组件到构建高级RAG与Agent应用
  • 系统性学习C语言-第二十三讲-文件操作
  • 渗透艺术系列之Laravel框架(一)
  • Effective C++ 条款03:尽可能使用const
  • 检验类设备中,交叉导轨如何确保加样精度?
  • mysql-数据表-DDL语句
  • Triton源代码分析 - 目录
  • freeRTOS 静态创建任务
  • TIM 输入捕获
  • pip, github 突然连不上?报错和解决方法如下
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-29,(知识点:非易失存储器)
  • 【AI周报】2025年7月26日
  • CUDA杂记--FP16与FP32用途
  • MoE替代LLM
  • linux内核电源管理
  • 面试150 加一
  • 一文速通《多元函数微分学》
  • C++11 右值引用 Lambda 表达式
  • AutoDL 数据盘清理指南:彻底删除 .Trash-0 内文件释放空间
  • 电脑负载监控接入了IOT物联网平台
  • 深入浅出 MyBatis-Plus Wrapper:让条件构造更简单高效
  • 定义域第一题