相信这两天看了 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 最有用的特性,没有之一。

虚拟线程的创建方式,主要有以下 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. 使用箭头语法 -> 直接返回值,无需 break
String 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常见面试题等。

有点意思!Java8后最有用新特性排行榜!的更多相关文章

  1. Java8时间日期处理新特性

    Java8时间日期处理新特性 简介 伴随lambda表达式.streams以及一系列小优化,Java 8 推出了全新的日期时间API.Java处理日期.日历和时间的不足之处:将 java.util.D ...

  2. java8 (jdk 1.8) 新特性——Lambda

    java8 (jdk 1.8) 新特性 --初步认识 1. 什么是lambda? 目前已知的是,有个箭头  -> 说一大段官方话,也没有任何意义 我们直接看代码: 之前我们创建线程是这样的 Ru ...

  3. Java9都快发布了,Java8的十大新特性你了解多少呢?

    Java 9预计将于今年9月份发布,这是否会是一次里程碑式的版本,我们拭目以待.今天,我们先来复习一下2014年发布的Java 8的十大新特性. Java 8可谓是自Java 5以来最具革命性的版本了 ...

  4. java8的十大新特性

    推荐学习的博客: http://blog.csdn.net/renfufei/article/details/24600507/-------讲解的非常通俗易懂 http://blog.csdn.ne ...

  5. 2020你还不会Java8新特性?

    Java8(1)新特性介绍及Lambda表达式 前言: 跟大娃一块看,把原来的电脑拿出来放中间看视频用 --- 以后会有的课程 难度 深入Java 8 难度1 并发与netty 难度3 JVM 难度4 ...

  6. Java8新特性之Stream

    原文链接:http://ifeve.com/stream/ Java8初体验(二)Stream语法详解 感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com上篇文章Java8初体验( ...

  7. java8 新特性 Stream

    1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel agg ...

  8. Java8 新特性 函数式接口

    什么是函数式接口   函数式接口是Java8引用的一个新特性,是一种特殊的接口:SAM类型的接口(Single Abstract Method).但是它还是一个接口,只是有些特殊罢了.  函数式接口的 ...

  9. 简单了解JAVA8的新特性

    JAVA8新特性会颠覆整个JAVA程序员的编程习惯 甚至如果您坚守JAVA7之前的编程习惯,今后你看比较年轻的程序员写的JAVA代码都会无法理解 所以为了保证不脱钩,我觉得有必要学习JAVA8的新特性 ...

  10. java8新特性学习1

    java8增加了不少新特性,下面就一些常见的新特性进行学习... 1.接口中的方法 2.函数式接口 3.Lambda表达式 4.java8内置的四大核心函数式接口 5.方法引用和构造器引用 6.Str ...

随机推荐

  1. Oracle中字符型级处理方法

    字符型简介 固定长度字符串-char(n) n代表字符串的长度,当实际长度不足时,利用空格在右端补齐,n的最大值不能大于2000.所以只要是固定长度的字符串,他的length(值)的长度总为n var ...

  2. Spring知识扫盲

    1.bean生命周期:看BeanFactory注释 翻译成中文 Bean工厂实现应该尽可能的支持标准的Bean生命周期接口.整套初始化方法及其标准顺序如下: BeanNameAware{@code s ...

  3. git记住多个账号

    前言 git每次推送都需要输入密码,或者两个不同账号间互顶. 如何处理这些问题呢? 两种途径:记住ssh协议公钥和记住多个密码. 前者我一直不推荐,所以不提. git配置文件 git全局的用户名.账号 ...

  4. Docker部署Nginx代理多个服务:公网域名与内网IP场景全解

    本文分享了我在公网和内网两种环境下,使用 Docker 部署 Nginx 并代理多个应用的完整实践.涵盖了常见的端口方式.路径方式.HTTPS 自动跳转.容器网络配置等关键细节,并附上完整的 dock ...

  5. leetcode 224

    简介 简易计算器 一时半会儿没写出来,看了官方题解. 感觉思路是遇到 ( 前一个操作符号,入栈,遇到 ) 栈中弹出操作符号 遇到 + 符号为栈顶符号 遇到 - 符号为 栈顶符号的反符号 官方使用栈来保 ...

  6. * .mesh 体网格文件解析

    简介 六面体网格由一个一个小方块构成 构建了一个小立方体的文件 cube.mesh MeshVersionFormatted 1 Dimension 3 Vertices 8 -1 -1 -1 1 1 ...

  7. 90%的C#程序员都不知道的冷门语法,第5个简直神了!

    大家好,我是.NET修仙日记的掌门人.作为深耕C#多年的老司机,今天要给大家分享几个藏在Visual Studio角落里的语法瑰宝.这些语法不仅能让你的代码更简洁高效,还能在Code Review时让 ...

  8. 如何使用ETLCloud拉通金蝶云

    一.ETLCloud集成组件 ETLCloud采用了一种创新的基于平台底座的理念.它通过将组件和平台进行分离,用户可以在平台上自行下载和安装所需的组件,而无需升级整个底座版本.这样用户就可以通过不断升 ...

  9. 【Container App】创建Container App后发现Application URL不完整

    问题描述 新创建了一个Container App服务,构建在内部访问的环境中( Container App Environment配置了虚拟网络并设置为内部访问). ##Container Apps ...

  10. 利用jave2进行音频处理

    很多朋友都知道,ffmpeg是一个功能强大的多媒体处理工具,可惜它并不是java语言开发,如果需要在java项目中使用时,得自己写很多代码,幸好github上有一个开源项目jave2 把ffmpeg做 ...