为了帮助大家跟上最新的技术潮流,计划启动一个专栏,重点分享Java领域的前沿知识。 这个专栏将详细解读从Java 8 - 最新版本的各种有趣的新特性。 会持续不断地发布相关内容,希望大家能够关注并收藏起来,跟随我们一起深入了解Java的最新进展!
详细了解Java Enhancement Proposals(JEPs)及其最新动态
- 🚀 访问官方网站:OpenJDK JEPs
- ❄️ 参考howtodoinjava博客:Java Versions and Features
为了帮助大家跟上最新的技术潮流,计划启动一个专栏,重点分享Java领域的前沿知识。 这个专栏将详细解读从Java 8 - 最新版本的各种有趣的新特性。 会持续不断地发布相关内容,希望大家能够关注并收藏起来,跟随我们一起深入了解Java的最新进展!
详细了解Java Enhancement Proposals(JEPs)及其最新动态
Java 21 引入了虚拟线程(Virtual Threads)功能,类似于Go语言中的Goroutines
。
虚拟线程是一种轻量级的线程,它可以极大地减少了编写、维护和管理高吞吐量并发应用程序所需的工作量。
Java平台目前为止有两种类型的线程:传统线程,也称为平台线程,和虚拟线程。
在引入虚拟线程之前,我们所使用的线程java.lang.Thread
是由所谓的平台线程支持的。
Java 21 引入了 switch 模式匹配功能,它增强了 switch 语句的功能,允许使用更简洁的语法来执行类型检查和数据提取。 该功能与记录模式(JEP 440)共同发展,并与之有相当大的互动。
与if条件中的instanceof
一样,switch case
现在可以对其值进行类型检查,并创建一个case作用域变量:
static String asStringValue(Object anyValue) {
return switch (anyValue) {
case String str -> str;
case JSONObject json -> json.toCompactString();
case BigDecimal bd -> bd.toEngineeringString();
case Integer i -> Integer.toString(i);
case LocalDate ld -> ld.format(DateTimeFormatter.ISO_LOCAL_DATE);
default -> "n/a";
};
}
Java 21 中的记录模式(Record Patterns)是对模式匹配的扩展,它允许在模式匹配中使用记录(Records)类型。 同时,记录模式还支持嵌套,可以实现更复杂的数据查询和处理。
到目前为止,Java中的模式匹配主要局限于匹配类型:instanceof类型匹配
// Java 16 之前
if (obj instanceof String) {
String str = (String) obj;
System.out.println(str);
}
// JAVA 16+
if (obj instanceof String str) {
System.out.println(str);
}
Java以其垃圾回收机制而闻名。这是它的主要优势之一,但也可能是许多头疼的根源。
在JDK 21中,有序集合(Sequenced Collections)引入了新的接口和方法来简化集合处理。
此增强功能旨在解决访问Java中各种集合类型的第一个和最后一个元素需要非统一且麻烦处理场景
Sequenced Collections
引入如下 3 个新接口,用于处理顺序List
、Set
和Map
,
并将它们整合到现有的集合类型中。这些新接口中的方法都具有默认实现。
Java 21 中引入了字符串模版(String Templates),它是一种新的字符串字面量,用于更简洁地构建字符串。
在之前,Java 提供了几种字符串组合的机制,但不幸的是,它们都存在一些缺点
+
操作符, 代码难以阅读String s = x + " plus " + y + " equals " + (x + y);
StringBuilder
和 StringBuffer
,代码冗长String s = new StringBuilder()
.append(x)
.append(“plus“)
.append(y)
.append(“equals“)
.append(x + y)
.println();
String::format
和 String::formatted
,容易出现参数数量和类型不匹配的问题String s = String.format("%2$d plus %1$d equals %3$d", x, y, x + y);
String t = "%2$d plus %1$d equals %3$d".formatted(x, y, x + y);
java.text.MessageFormat
格式化消息,语法复杂对一些人来说可能不太熟悉MessageFormat mf = new MessageFormat("{0} plus {1} equals {2}");
String s = mf.format(x, y, x + y);
该版本推出的均为孵化与预览功能,所以这里不做单独的详细解读,大部分内容均放在Java 21中介绍。
以下内容在Java 21中正式定稿,可根据链接查看终稿内容:
该版本推出的均为孵化与预览功能,所以这里不做单独的详细解读,大部分内容均放在Java 21中介绍。
以下预览特性在Java 21中正式定稿:
Java 18 引入了@snippet
标签,用于在API文档中嵌入代码片段,以便更好地展示API的使用方法。
主要特点:
用于单独的小段代码, 当代码片段复杂时, 使用复合模式的文档注释,如下所示:
* <pre>{@code
* 源代码行1
* ...
* 源代码行n
* }</pre>