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

Java 14 新特性Record、instanceof、switch语法速览

一、instanceof 模式匹配

旧语法:

if (obj instanceof String) {String s = (String) obj;System.out.println(s.length());
}

新语法:

if (obj instanceof String s) {System.out.println(s.length());
}

核心语法格式:

if (object instanceof Type variable) { ... }

作用:

  • 自动类型匹配 + 自动类型转换;
  • 避免显式强制类型转换;
  • 提高代码可读性与安全性。

二、Records

Record 不是构造函数,而是一种特殊的)自动生成构造函数和其他常用方法。
在 Java 中,record 是一种语法糖(syntactic sugar),它用极简的方式定义了一个不可变的数据类

传统类写法:

public final class Writer {private final String name;private final int age;public Writer(String name, int age) {this.name = name;this.age = age;}public String name() { return name; }public int age() { return age; }
}

Record 写法:

public record Writer(String name, int age) { }

核心语法格式:

public record 类名(字段列表) { }

自动生成:

  • 构造方法;
  • equals() / hashCode()
  • toString()
  • Getter(无前缀)。

不支持:

  • setter 方法;
  • 可变字段。
public record Writer(String name, int age) { }

这行代码编译后,Java 编译器实际上会自动帮你生成一个完整的 final 类,类似于:

public final class Writer extends java.lang.Record {private final String name;private final int age;public Writer(String name, int age) {   //  自动生成的构造方法this.name = name;this.age = age;}public String name() { return name; }   //  getter(无前缀)public int age() { return age; }public String toString() { ... }        //  自动生成public boolean equals(Object o) { ... } //  自动生成public int hashCode() { ... }           //  自动生成
}

所以你可以理解为:

Record 是一个完整的类,
它“自带构造方法”,
但它本身不是构造方法。

构造方法的种类

在 Record 中,其实你还可以定义不同的构造函数(手动改造默认行为)。

标准构造方法(编译器自动生成)

public record City(String name, int population) { }

使用时:

City city = new City("北京", 2154);

显式定义标准构造方法

你可以自己写,但必须对所有字段赋值:

public record City(String name, int population) {public City(String name, int population) {System.out.println("创建城市:" + name);this.name = name;this.population = population;}
}

紧凑构造方法

当你只想加逻辑,不想重复字段赋值时,可以用这种写法(Java 自动帮你赋值):

public record City(String name, int population) {public City {if (population < 0) {throw new IllegalArgumentException("人口数不能为负数");}}
}

等价于:

public City(String name, int population) {if (population < 0) throw new IllegalArgumentException("人口数不能为负数");this.name = name;this.population = population;
}

如何理解 Record 与构造函数的关系

概念Record构造函数
定义方式record City(String name, int pop)public City(String name, int pop)
所属层级类定义类内方法
是否自动生成需手写
主要作用定义不可变数据类初始化对象字段
是否可重载否(字段固定)可有多个重载

总结一句话:

Record 是一个类;构造函数只是 Record 自动生成的一部分。

示例:完整使用 Record

public record City(String name, int population) {public City {if (population < 0) {throw new IllegalArgumentException("人口不能为负数");}}public String greeting() {return "欢迎来到 " + name + ",人口:" + population + " 万";}
}public class Main {public static void main(String[] args) {City beijing = new City("北京", 2154);System.out.println(beijing.greeting());}
}

输出:

欢迎来到 北京,人口:2154 万

三、Switch 表达式

旧式 switch:

switch (type) {case BASKETBALL:result = "詹姆斯哈登";break;case FOOTBALL:result = "C罗";break;default:result = "未知";
}

新式 switch:

String result = switch (type) {case TENNIS -> "费德勒";case FOOTBALL -> "C罗";case BASKETBALL -> "詹姆斯";case PINGPANG -> "马龙";default -> throw new IllegalArgumentException("未知类型");
};

核心语法格式:

switch (表达式) {case 常量1 -> 结果1;case 常量2 -> 结果2;...default -> 结果N;
}

新特性:

  • 支持 -> 箭头语法;
  • 可直接返回值(可赋值或 return);
  • 不再需要 break
  • 更简洁、更安全。

四、Text Blocks

旧写法:

String html = "<html>\n" +"  <body>\n" +"    <p>Hello</p>\n" +"  </body>\n" +"</html>";

新写法:

String html = """<html><body><p>Hello</p></body></html>""";

核心语法格式:

String str = """
多行文本内容
可自由换行、缩进
""";

优势:

  • 无需 + 拼接;
  • 无需 \n 转义;
  • 保留自然排版;
  • 特别适合拼接 HTML / SQL / JSON 字符串。

在这里插入图片描述

特性关键语法主要改进点
instanceof 模式匹配if (obj instanceof Type var)自动类型转换
Recordsrecord 类名(字段)自动生成构造 & getter
Switch 表达式switch (x) { case Y -> ... }可返回值、免 break
Text Blocks"""多行文本"""优雅拼接多行字符串
http://www.dtcms.com/a/524723.html

相关文章:

  • 网站的空间域名做公司网站的南宁公司
  • 中英文网站建站太原网站建设招聘
  • 建一个网站大概需要多长时间2016网站开发语言
  • 在Windows上使用Selenium + Chrome Profile实现自动登录爬虫
  • 八股-2025.10.24
  • 力扣2576. 求出最多标记下标
  • 做网站需要什么配置服务器工业产品设计软件
  • 大型语言模型基础之 Prompt Engineering:打造稳定输出 JSON 格式的天气预报 Prompt
  • [cpprestsdk] JSON类--数据处理 (`json::value`, `json::object`, `json::array`)
  • 2014 个人网站备案soho需要建网站吗
  • BugKu Web渗透之 文件包含2
  • 为什么建设营销型网站wordpress弹穿登陆
  • 高职示范校建设网站建设工程标准合同范本
  • GBASE8s数据库-常用SQL命令
  • 第 02 天:虚拟化与 Linux 设置(重点:VirtualBox 实践)
  • 服务器实时流量监控工具推荐:确保服务器不被滥用
  • 深度学习------YOLOv5《第二篇》
  • Google Drive 超大文件下载到服务器
  • vscode中Java开发环境的配置
  • 【穿越Effective C++】条款5:了解C++默默编写并调用哪些函数——编译器自动生成的秘密
  • docker镜像从服务器Acopy到服务器B
  • 网站开发微信端小说网站如何建设
  • 网站建设黄页视频wordpress的标签设置主页
  • 学习java线程池ThreadPoolExecutor类使用介绍
  • 有关建设旅行网站的建设负责网站的建设规划
  • 学Java第三十七天-------常用API
  • 微信漫画网站模板wordpress 视频展示
  • 【NestJS】依赖注入:超越自动new的深层解析
  • 北京网站建设策划建设公司长春建站培训
  • Mac常用软件