news 2026/6/15 15:42:36

Java Record入门指南:从零开始学习不可变数据类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java Record入门指南:从零开始学习不可变数据类

快速体验

  1. 打开 InsCode(快马)平台 https://www.inscode.net
  2. 输入框内输入如下内容:
创建一个面向Java新手的Record教学示例,包含:1) 最基本的Record定义示例;2) 展示如何添加自定义方法;3) 演示Record的模式匹配用法。要求:每个示例都有详细注释,并提供一个简单的main方法展示用法,输出要有明确的解释说明。
  1. 点击'项目生成'按钮,等待项目生成完整后预览效果

今天想和大家分享一下Java 14引入的一个很实用的特性——Record类型。作为Java新手,刚开始接触这个概念可能会觉得有点抽象,但其实它用起来特别简单,能帮我们少写很多模板代码。

  1. Record是什么?Record本质上是一种特殊的类,专门用来表示不可变的数据结构。比如我们要表示一个用户信息,包含姓名和年龄,用传统Java类需要写构造方法、getter、equals()等一大堆代码,而用Record只需要一行定义。

  2. 基本定义示例我们先看最简单的Record定义。比如要表示一个点坐标,可以这样写:

record Point(int x, int y) {}

这一行代码就自动帮我们生成了: - 两个final字段x和y - 全参数构造方法 - getter方法(方法名就是字段名) - equals()和hashCode() - toString()

  1. 添加自定义方法虽然Record自动生成了很多方法,但我们也可以添加自己的方法。比如给Point添加一个计算到原点距离的方法:
record Point(int x, int y) { public double distanceFromOrigin() { return Math.sqrt(x*x + y*y); } }
  1. 模式匹配用法Java 16开始,Record可以和模式匹配一起使用,让代码更简洁。比如:
if (obj instanceof Point(int x, int y)) { System.out.println("点坐标是:" + x + "," + y); }
  1. 完整示例下面是一个完整的例子,展示了Record的各种用法:
public class Main { public static void main(String[] args) { Point p = new Point(3, 4); System.out.println(p); // 自动调用toString() System.out.println("距离原点:" + p.distanceFromOrigin()); // 模式匹配 Object obj = new Point(5, 6); if (obj instanceof Point(int x, int y)) { System.out.println("匹配到点:" + x + "," + y); } } } record Point(int x, int y) { public double distanceFromOrigin() { return Math.sqrt(x*x + y*y); } }
  1. 使用建议
  2. 适合场景:当你的类主要用来保存数据时
  3. 不适合场景:需要可变状态或复杂业务逻辑时
  4. 注意:Record是final的,不能被继承

  5. 常见问题Q:Record和普通类有什么区别? A:Record更简洁,自动生成很多方法,且是不可变的。

Q:什么时候该用Record? A:当你需要一个纯粹的数据载体时。

Q:Record能继承其他类吗? A:不能,Record隐式继承java.lang.Record。

最近我在InsCode(快马)平台上尝试这些Java Record的例子时,发现它的在线编辑器特别方便,不用配置任何环境就能直接运行代码。对于新手来说,这种即开即用的体验真的很友好,可以快速验证各种语法特性。特别是它的实时预览功能,让我能立即看到代码执行结果,学习效率提高不少。

如果你也是Java初学者,建议可以在这个平台上多练习Record的用法。它的一键运行功能省去了配置环境的麻烦,让我能更专注于学习语言特性本身。我试了几个不同的Record例子,发现响应速度很快,对于理解这个新特性帮助很大。

快速体验

  1. 打开 InsCode(快马)平台 https://www.inscode.net
  2. 输入框内输入如下内容:
创建一个面向Java新手的Record教学示例,包含:1) 最基本的Record定义示例;2) 展示如何添加自定义方法;3) 演示Record的模式匹配用法。要求:每个示例都有详细注释,并提供一个简单的main方法展示用法,输出要有明确的解释说明。
  1. 点击'项目生成'按钮,等待项目生成完整后预览效果
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 12:53:52

C048基于博途西门子1200PLC三轴数控钻床控制系统仿真

C048基于博途西门子1200PLC三轴数控钻床控制系统仿真C048三轴数控钻床S71200HMI主电路图外部接线图流程图IO分配表资料包含: 1.程序和HMI仿真工程(博图V16及以上版本可以打开) 2.PLC端口定义IO分配表1份 3.PLC外部接线图CAD版本和PDF版本各1份…

作者头像 李华
网站建设 2026/6/15 14:13:30

如何快速部署中文多情感语音合成?Flask API免配置方案

如何快速部署中文多情感语音合成?Flask API免配置方案 📌 背景与需求:为什么需要中文多情感TTS? 在智能客服、有声阅读、虚拟主播等应用场景中,单一语调的语音合成已无法满足用户体验需求。用户期望听到更具表现力、…

作者头像 李华
网站建设 2026/6/10 21:53:58

教育特供:课堂用Llama Factory云端实验室

教育特供:课堂用Llama Factory云端实验室 大型语言模型(LLM)微调是当前AI教学中的重要实践环节,但学校计算资源有限往往难以满足班级规模的教学需求。教育特供:课堂用Llama Factory云端实验室镜像提供了一套开箱即用的解决方案,让…

作者头像 李华
网站建设 2026/6/15 15:33:55

Linux新手必看:SUDO -I的简易图解指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个交互式Linux权限学习应用,包含:1) sudo -i的3D动画原理演示 2) 可交互的命令行模拟器 3) 渐进式难度挑战任务 4) 实时错误检查和修正建议 5) 学习进…

作者头像 李华
网站建设 2026/6/15 13:51:05

Llama Factory隐藏功能:用低代码界面实现复杂强化学习微调

Llama Factory隐藏功能:用低代码界面实现复杂强化学习微调 作为一名长期研究强化学习(RL)的从业者,我最近尝试将RL技术应用于大语言模型(LLM)微调时,发现现有框架要么需要编写大量底层代码&…

作者头像 李华
网站建设 2026/6/15 13:52:26

传统调试vsAI辅助:解决日志框架冲突效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个对比实验:1) 传统方式:手动重现LoggerFactory不是Logback LoggerContext但Logback在类路径的错误,记录从发现问题到解决所需的时间和步…

作者头像 李华