跳至主要內容
Java新版本特性(持续连载)

为了帮助大家跟上最新的技术潮流,计划启动一个专栏,重点分享Java领域的前沿知识。 这个专栏将详细解读从Java 8 - 最新版本的各种有趣的新特性。 会持续不断地发布相关内容,希望大家能够关注并收藏起来,跟随我们一起深入了解Java的最新进展!

详细了解Java Enhancement Proposals(JEPs)及其最新动态


会敲代码的程序猿原创大约 6 分钟JavaJava Features
Java 21 新特性:虚拟线程

Java 21 引入了虚拟线程(Virtual Threads)功能,类似于Go语言中的Goroutines。 虚拟线程是一种轻量级的线程,它可以极大地减少了编写、维护和管理高吞吐量并发应用程序所需的工作量。

Java平台目前为止有两种类型的线程:传统线程,也称为平台线程,和虚拟线程

平台线程

在引入虚拟线程之前,我们所使用的线程java.lang.Thread是由所谓的平台线程支持的。


会敲代码的程序猿原创大约 4 分钟JavaJava Features
Java 21 新特性:switch模式匹配

Java 21 引入了 switch 模式匹配功能,它增强了 switch 语句的功能,允许使用更简洁的语法来执行类型检查和数据提取。 该功能与记录模式(JEP 440)共同发展,并与之有相当大的互动。

switch + instanceof

与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";
    };
}

会敲代码的程序猿原创小于 1 分钟JavaJava Features
Java 21 新特性:记录模式

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);
}

会敲代码的程序猿原创大约 2 分钟JavaJava Features
Java 21 新特性:分代ZGC

Java以其垃圾回收机制而闻名。这是它的主要优势之一,但也可能是许多头疼的根源。

  • Java 11(JEP 333)中引入了一个可扩展的低延迟垃圾收集器,称为ZGC
  • Java 15(JEP 377)中 ZGC 可用于生产
  • 现在,随着Java 21的出现,它已经发展成为一种分代GC(JEP 439

会敲代码的程序猿原创大约 5 分钟JavaJava Features
Java 21 新特性:有序集合

在JDK 21中,有序集合(Sequenced Collections)引入了新的接口和方法来简化集合处理。

此增强功能旨在解决访问Java中各种集合类型的第一个和最后一个元素需要非统一且麻烦处理场景

Sequenced Collections 引入如下 3 个新接口,用于处理顺序ListSetMap, 并将它们整合到现有的集合类型中。这些新接口中的方法都具有默认实现。


会敲代码的程序猿原创大约 5 分钟JavaJava Features
Java 21 新特性:字符串模版(Preview)

Java 21 中引入了字符串模版(String Templates),它是一种新的字符串字面量,用于更简洁地构建字符串。

字符串组合的机制

在之前,Java 提供了几种字符串组合的机制,但不幸的是,它们都存在一些缺点

  1. 使用 + 操作符, 代码难以阅读
    String s = x + " plus " + y + " equals " + (x + y);
    
  2. 使用 StringBuilderStringBuffer,代码冗长
    String s = new StringBuilder()
                    .append(x)
                    .append(“plus“)
                    .append(y)
                    .append(“equals“)
                    .append(x + y)
                    .println();
    
  3. 使用 String::formatString::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);
    
  4. 使用 java.text.MessageFormat 格式化消息,语法复杂对一些人来说可能不太熟悉
    MessageFormat mf = new MessageFormat("{0} plus {1} equals {2}");
    String s = mf.format(x, y, x + y);
    

会敲代码的程序猿原创大约 5 分钟JavaJava Features
Java20 新特性总结

该版本推出的均为孵化与预览功能,所以这里不做单独的详细解读,大部分内容均放在Java 21中介绍。

以下内容在Java 21中正式定稿,可根据链接查看终稿内容:


会敲代码的程序猿原创小于 1 分钟JavaJava Features
Java19 新特性总结

该版本推出的均为孵化与预览功能,所以这里不做单独的详细解读,大部分内容均放在Java 21中介绍。

  • 422: Linux/RISC-V Port:RISC-V是一个基于精简指令集(RISC)原则的开源指令集架构(ISA),这个JEP的主旨则是移植JDK到RISC-V上。

以下预览特性在Java 21中正式定稿:


会敲代码的程序猿原创小于 1 分钟JavaJava Features
Java 18 新特性:新增@snipppet标签

Java 18 引入了@snippet标签,用于在API文档中嵌入代码片段,以便更好地展示API的使用方法。

主要特点:

  • 有效性检查,代码包含语法错误时,会出现错误提示
  • 启用现代样式,例如语法高亮显示,以及名称与声明的自动链接
  • 为创建和编辑代码段提供更好的IDE支持

存在的@code标签

用于单独的小段代码, 当代码片段复杂时, 使用复合模式的文档注释,如下所示:

 * <pre>{@code
 *     源代码行1
 *     ...
 *     源代码行n
 * }</pre>

会敲代码的程序猿原创大约 1 分钟JavaJava Features