有点意思!Java8后最有用新特性排行榜!

news/2025/9/18 16:09:30/文章来源:https://www.cnblogs.com/vipstone/p/19098995

相信这两天看了 JDK 25 新特性的同学已经彻底对 Oracle 失望了,这那是挤牙膏啊?是连牙膏都懒得挤了。

所以,大家都在评论区喊话,如果你(Oracle)实在不想发可以不发,但不要糊弄大家。

那么,今天呢。我也把从 JDK 8 之后的长期支持版:JDK11、JDK17、JDK21、JDK25 的新特性都捋了一遍,并且对于这些新特性做一个受欢迎的新特性排行榜,希望得到各位大佬的指正和补充,欢迎评论区留言。

HOT1:Record

诞生于 JDK 14,正式发布于 JDK 17。

Record(记录)是一种特殊的类,用于建模纯数据载体。

public record Person(String name, int age) { }  Person p = new Person("Alice", 30);  
System.out.println(p.name());  // 输出: Alice  
System.out.println(p.age());   // 输出: 30

Record 类型自动提供了构造方法、访问器(getter)、equals()、hashCode()、toString() 方法以及一个解析器(parser),无需定义 Class,且把 Lombok 的事情也做了。

使用场景

前后端使用 JSON 交互时,可能需要传递各种属性,这个时候很难定义统一的 VO 对象,有了 Record 之后,可以非常方便的接收前端发送的 JSON 参数。

HOT2:虚拟线程

轻量级线程(Project Loom),极大提升并发性能。JDK 21 最有用的特性,没有之一。

1

虚拟线程的创建方式,主要有以下 4 种:

  1. Thread.startVirtualThread(Runnable task) -> 创建并启动虚拟线程。
  2. Thread.ofVirtual().unstarted(Runnable task) -> 只创建不启动虚拟线程。
  3. Thread.ofVirtual().factory() -> 只创建虚拟线程工厂。
  4. Executors.newVirtualThreadPerTaskExecutor() -> 使用线程池的方式创建虚拟线程。

最常见的使用方式:

// 创建并启动虚拟线程
Thread.startVirtualThread(() -> {System.out.println("Do virtual thread.");
});

虽然,我一直都在用线程池或动态线程池,并没有真正的使用到虚拟线程,但就感觉这个技术设计的很好,以后可能会用到。

HOT3:switch

到了 HOT 3,个人就觉得比较有争议了,但从实用性上来讲还是选择了这个比较常用的功能 switch。

switch 这个技术比较奇怪,几乎每个版本中都有对于 switch 的升级,JDK 17 中 switch 支持了箭头表达式,JDK 21 新特性正式转正,到了 JDK 25 还有预览版特性的扩充,真的很神奇。

目前 switch 我们可以这样用了:

// JDK 17 (正式特性)
public class SwitchJDK17 {public static void main(String[] args) {String day = "MONDAY";// 1. 使用箭头语法 -> 直接返回值,无需 breakString typeOfDay = switch (day) {case "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY" -> "工作日";case "SATURDAY", "SUNDAY" -> "周末";default -> "未知";};System.out.println("typeOfDay: " + typeOfDay);// 2. 如果需要执行多行代码,使用 yield 返回值int num = 2;String result = switch (num) {case 1 -> "一";case 2 -> { System.out.println("这是数字 2");yield "二"; // 在代码块中使用 yield 返回结果}case 3 -> "三";default -> "其他";};System.out.println("result: " + result);}
}

小结

新特性到了 HOT3 之后就更不知道怎么排了,第一,确实有用的新特性太少;第二,新特性确实太少。当然,最重要的是第二点。各位大佬是什么想法?欢迎评论区留言讨论。

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:场景题、SpringAI、SpringAIAlibaba、并发编程、MySQL、Redis、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、JVM、设计模式、消息队列、Dify、Coze、AI常见面试题等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/907240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构 Trick 之:KDT 求 k 近/远 点

注意,此 Trick 的时间复杂度是错的,但是貌似目前没人能卡满。 能够解决的问题\(O(n \sqrt n)\) 可过。 维护二维平面。 每次求到一个点的 \(k\) 近或 \(k\) 远点。 \(k\) 很小(\(20\) 左右)思路 二维空间想到 KDTr…

.NET 8程序配置版本及产品信息

一、给主程序单独添加配置 1、双击主程序,会打开主程序的.csproj文件,在PropertyGroup下添加 <Company>Your Company</Company><Product>Your Product</Product><Version>1.2.3<…

C语言第二讲:进制转化

C语言中进制转化的符号表示进制 数据类型 赋值格式二进制 %0b a=0b1010八进制 %o a=03344十进制 %d a=1234十六进制 %x/%X a=0x34a5 / 0X43D6输出时转化: int a=100; printf("%o",a); 赋值时转化: int a;…

深入解析:Java 设计模式之桥接模式(Bridge Pattern)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

XXL-JOB(4)

XXL-JOB(4)分片任务 分片任务能更好的利用集群的能力,可以同时调度多个机器并行运行任务。分片任务的实现原理包括以下几个核心步骤:1、任务分配当一个分片任务被触发时,调度器会根据任务的分片参数决定需要多少个…

QOJ #10485. Peculiar Protocol 题解

Description 你有一个序列 \(a_1, a_2, \dots, a_n\),以及两个参数 \(d, r\)。 你可以做如下操作若干次:每次选择一段区间,使得他们的和可以被表示成 \(k \times d + r\) 的形式,其中 \(k\) 是一个非负整数。 你把…

C++ 常用关键字

1. static 控制作用域、生命周期或类成员归属 // 1. 全局/命名空间:仅当前文件可见(避免跨文件重定义) static int global_static = 10; // 其他文件无法通过 extern 访问// 2. 局部变量:生命周期延长至程序结束(…

vim 入门教学2

vim 入门教学2normal模式 normal模式markm{a-zA-Z} 给当前行做标记{a-zA-Z},如果使用大写字母可以跨文件跳跃 {a-zA-Z} 将光标跳转到{a-zA-Z}的行首跳转到上次使用跳转的位置例子: ma 将当前行标记为a a 跳转到a标…

【AP出版】第四届数理统计与经济分析国际学术会议 (MSEA 2025)

第四届数理统计与经济分析国际学术会议 (MSEA 2025)将于2025年12月05-07日在中国广州召开。【高录用快见刊:最快一周内即可录用,会后3-4个月见刊】 【征稿范围:数理统计、经济分析大方向主题均可收稿】 第四届数理统…

数据结构 Trick 之:区间子区间计数

能够解决的问题\(O(n \log n)\) 可过。 维护数列,无修改,每次查询一个区间的所有子区间。 离线思路 看到一个区间的所有子区间这种查询,直接做显然是做不了的。 考虑离线,那么将询问区间进行右端点排序,然后就可以…

mapstruct.Mapper|Mapping详解

------------------------------------------------------------------------------------------ org.mapstruct.Mapper 和 org.mapstruct.Mapping 是 MapStruct 框架中的核心注解,用于实现 Java 对象之间的自动映射。…

抽象代数-学习笔记

主要积累一些遇到的例子、题目。不定时更新。 运算有结合律的运算:普通/复数/矩阵/模意义下加法、乘法,映射复合,与或异或/集合相关, min/max。 仅仅满足部分群公理:\(\mathbb{N}^*, \mathbb{N}\)。\(\{0,1,2\}\)…

如何在保证质量的前提下,快速完成一份 PPT?

这是一个非常经典且普遍的问题,尤其对于产品经理、咨询顾问等角色来说,PPT既是生产力工具,也是时间吞噬黑洞。你能意识到这个问题并寻求解决方案,已经领先了很多人。 在保证质量的前提下快速完成PPT,绝非单纯追求…

XXL-JOB(3)

XXL-JOB(3)开发Bean模式(基于方法)Bean模式任务,支持基于方法的开发方式,每个任务对应一个方法。基于方法开发的任务,底层会生成JobHandler代理,和基于类的方式一样,任务也会以JobHandler的形式存在于执行器任务…

ClickHouse 表引擎深度解析:ReplacingMergeTree、PARTITION、PRIMARY KEY、ORDER BY 详解 - 若

ClickHouse 表引擎深度解析:ReplacingMergeTree、PARTITION、PRIMARY KEY、ORDER BY 详解 前言 ClickHouse 作为高性能的列式数据库,其表引擎设计是其核心优势之一。ReplacingMergeTree 是处理重复数据的利器,而 PA…

UOS统信服务器操作系统V20(1070)安装mysql8.4.5(建议安装glibc2.28版本)

环境:OS:UOS Server 20 统信服务器操作系统V20(1070)mysql:8.4.5 glib.2.17 操作系统下载https://www.chinauos.com/resource/download-server查看系统glibc版本[root@localhost yum.repos.d]# ldd --versionldd (GNU …

web5(phps源码泄露)

访问index.phps,会自动下载index.php文件 点击查看即可得到flag

web3(自带网络工具包查看数据)

查看源码什么也没有扫目录也什么都没有只能说信息收集能力还欠佳, 我们可以先尝试使用浏览器自带的网络工具查看一下数据包。

web17(备份的sql文件泄露)

用常见的数据库工具打开即可

web11(通过Dns检查查询Flag)

:::info 223.5.5.5测试的解析结果是否具有代表性?(来自阿里云官网)具备一定的代表性,在国内客户端使用223.5.5.5有一定的用户群体,但是该测试结果并不能代表全部用户;如果223.5.5.5测试已经生效,但是您本地仍然不…