相信这两天看了 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. CF1905C Largest Subsequence 题解

    CF1905C Largest Subsequence 首先考虑如何生成一个字典序最大的子序列.我们先考虑找到字符串中的最大元素,然后在其之后找到第二大的元素,重复这个过程,直到达到序列末尾. 我们可 ...

  2. 前端开发系列067-JQuery篇之框架操作CSS

    一.jQuery框架的CSS方法 jQuery框架提供了css方法,我们通过调用该方法传递对应的参数,可以方便的来批量设置标签的CSS样式. 使用JavaScript设置标签的样式相对来说比较麻烦,而 ...

  3. Electrical(Hardware) Protocols: FIFO / Pmod™ / JTAG及常用插座(20pin,14pin,10pin)插头类型及针序/ SPI / IIC / IIS / UART / SWD / ICSP / CANBus/ModBus

    LVCMOS: Low Voltage COMS LVTTL: Low Voltage TTL Electrical(Hardware) Protocols: 0. Pmod: innovated b ...

  4. golang多协程并发工作示例

    golang多协程并发工作 package main import ( "fmt" "log" "os" "sync" ...

  5. NIO复习(2):channel

    上篇学习了NIO的buffer,继续来学习channel,类图如下(注:为了不让图看起来太复杂,隐藏了一些中间的接口) Channel派生了很多子接口,其中最常用的有FileChannel(用于文件操 ...

  6. MySQL 18 为什么这些SQL语句逻辑相同,性能却差异巨大?

    在MySQL中,有很多看上去逻辑相同,但性能差异巨大的SQL语句.对这些语句使用不当的话,就会不经意导致整个数据库压力变大.本文选择了三个这样的案例. 案例一:条件字段函数操作 假设现在维护了一个交易 ...

  7. win10专业版开机电脑红屏的问题

    有深度技术的win10专业版用户,发现电脑开机后屏幕会变成红色的,再次重启电脑,也没有恢复正常,这个问题怎么解决呢?其实,这是因为显示设置出了问题,所以才会出现这种情况.那么,我们该怎么解决这个问题呢 ...

  8. Unity IL2CPP发布64位,以及代码裁剪Strip Engine Code

    说明 https://blog.csdn.net/final5788/article/details/100183528 当裁剪发生了查看什么被裁剪了 https://blog.csdn.net/Zh ...

  9. 深入浅析BIO、NIO、AIO

    https://www.cnblogs.com/henuliulei/p/15143649.html BIO.NIO.AIO Java的I/O演进之路I/O模型 :就是用什么样的通道或者说是通信模式和 ...

  10. Bcrypt 简介与加密和验证示例【加密知多少系列_8】

    〇.简介 Bcrypt 是一种基于 Blowfish 加密算法的单向哈希函数,专为密码存储设计.它通过随机盐值(salt)和可调节的工作因子(cost factor)实现高安全性,是目前主流的密码哈希 ...