Bootstrap

Java8、Java11、Java15、Java21新特性

目录

一、java8新特性

1.1、Lambda表达式

1.2、函数式接口和API

1.3、Stream API

1.4、默认方法(Default Methods)

1.5、方法引用

1.6、Java时间API

1.7、CompletableFuture

1.8、移除PermGen空间

二、java11新特性

2.1、局部变量类型推断

2.2、新增的字符串方法

2.3、HTTP/2客户端API

2.4、Epsilon垃圾收集器

2.5、ZGC垃圾收集器

2.6、Unicode 10的支持

三、Java15的新特性

3.1、默认的垃圾收集器ZGC

3.2、新的语法特性,如模式匹配和switch表达式

3.3、新的API特性 :

3.4、模块化系统 :

3.5、JDK多个代码仓库合并 :

3.6、Nashorn JavaScript Engine被移除 :

3.7、新增文本块

3.8、CharSequence增强

四、Java21新特性

4.1、String Templates 功能简化了字符串的编写和维护,使开发人员可以更轻松地在 Java 代码中生成复杂的字符串。

4.2、Record Patterns 功能简化了数据查询,使开发人员可以更轻松地从记录类中提取数据。

4.3Pattern Matching for switch 功能简化了复杂的数据查询,使开发人员可以更轻松地从 switch 语句中提取数据。

4.4Virtual Threads 功能提高了并发应用程序的性能,使开发人员可以更轻松地编写高性能的并发应用程序。

4.5Scoped Values 功能简化了线程间数据共享,使开发人员可以更轻松地在线程之间共享不可变数据。


一、java8新特性

1.1、Lambda表达式

Lambda表达式是Java 8的最显著特性之一,它允许以更简洁的方式编写匿名函数。Lambda表达式可以用于函数式接口,使得代码更加简洁、可读性更高。

1.2、函数式接口和API

Java 8引入了函数式接口,这些接口只有一个抽象方法。此外,标准库中还增加了一些支持函数式编程的API,如Stream API、Optional类等。

1.3、Stream API

Stream API提供了一种流式处理集合数据的方式。通过使用Stream API,可以以声明式的方式对集合进行过滤、映射、排序等操作,极大地提高了代码的可读性和简洁性。

1.4、默认方法(Default Methods)


接口中可以定义默认方法,即带有默认实现的方法。这样做允许在接口中添加新方法而不会破坏已有的实现类。

1.5、方法引用


方法引用提供了一种引用已经存在的方法作为Lambda表达式的简化方式。通过方法引用,可以直接传递方法的引用而不是执行具体的Lambda表达式。

1.6、Java时间API

Java 8引入了全新的日期和时间API,取代了原先的Date和Calendar类。新API提供了更好的设计和易用性,以及对时区、日历等功能的支持。

1.7、CompletableFuture

CompletableFuture是一种可组合的异步编程机制,用于处理异步操作和并发编程。它提供了更好的错误处理机制和链式编程风格。

1.8、移除PermGen空间

Java 8中移除了永久代(PermGen space),取而代之的是元数据区(Metaspace)。这样消除了永久代带来的内存溢出问题,并改善了垃圾回收的效率。

二、java11新特性

2.1、局部变量类型推断

引入了var关键字,可以用于局部变量的声明,根据初始化值的类型自动推断变量的类型.需要注意的是,var关键字只能用于局部变量的声明,不能用于成员变量、方法参数、方法返回值等。

var message = "Hello, Java 11!";


2.2、新增的字符串方法

Java 11为String类添加了strip()、stripLeading()、stripTrailing()等方法,用于去除字符串首尾的空格。

2.3、HTTP/2客户端API

引入了新的标准化HTTP客户端API,支持HTTP/2协议,并提供了异步和响应式的特性。

2.4、Epsilon垃圾收集器

新增了Epsilon垃圾收集器,它是一种实验性的垃圾收集器,不进行内存回收操作,适用于性能测试和短期任务。

2.5、ZGC垃圾收集器

ZGC无疑是Java GC算法的一个大变革,相比之前的GC算法,提供了以下亮眼的特性:

  • 亚毫秒级的最大暂停时间 (最大暂停时间为10ms,但实际暂停时间基本在1ms以内)
  • 暂停时间与堆大小无关,与活跃对象和根引用集合大小无关
  • 堆大小从8M到16T都可以支持

ZGC最早出现在JDK 11中作为实验特性,从Java15开始作为生产特性使用

2.6、Unicode 10的支持

Java 11对Unicode进行了更新,支持Unicode版本10。Unicode 10增加了数百个字符和符号,包括新的表情符号和文字。Java 11的更新确保了对最新Unicode标准的支持,使得开发者可以处理更广泛的字符和文本编码。

三、Java15的新特性

3.1、默认的垃圾收集器ZGC

引入了新的默认垃圾收集器 ZGC,这是一种可扩展、高吞吐量的垃圾收集器。

3.2、新的语法特性,如模式匹配和switch表达式

引入了新的语法特性,如模式匹配和switch表达式。这些新特性可以简化代码并提高可读性。


import java.util.Date;
public class PatternMatchingExample {
    public static void main(String[] args) {
        Date date = new Date();
        switch (date.getDay()) {
            case 1 -> System.out.println("星期一");
            case 2 -> System.out.println("星期二");
            case 3 -> System.out.println("星期三");
            case 4 -> System.out.println("星期四");
            case 5 -> System.out.println("星期五");
            case 6 -> System.out.println("星期六");
            case 7 -> System.out.println("星期日");
            default -> System.out.println("未知日期");
        }
    }
}
3.3、新的API特性 :

Java 15 引入了新的 API 特性,如改进的 Stream API : ByteArrayOutputStream和新的日期和时间 API。这些新特性可以使开发人员更方便地处理数据和日期时间。

3.4、模块化系统 :

Java 15 引入了模块化系统,这是 Java 平台长期以来的一个重要改进。模块化系统可以将代码划分为模块,从而提高代码的可维护性和可重用性。

3.5、JDK多个代码仓库合并 :

Java 15 将多个 JDK 代码仓库合并到一个单独的储存库中,方便开发和管理。

3.6、Nashorn JavaScript Engine被移除 :

Java 15 移除了 Nashorn JavaScript Engine 和 jjs 命令行工具,取而代之的是 GraalVM。

3.7、新增文本块
/**
 * JAVA15 新增文本块
 * 终于支持了一种多行字符串文字,写起来更方便了,不用那么多引号加号了
 */
public class TextBlockTest {
    public static void main(String[] args) {
        // 原来的写法
        String html = "<html>\n" +
                "<body>\n" +
                " <h1>Java 15以前写法,不方便</h1>\n" +
                " <p>xuesong</p>\n" +
                "</body>\n" +
                "</html>";
        System.out.println(html);
        // 新写法
        html = """
            <html>
            <body>
             <h1>Java 15 新特性:文本块</h1>
             <p>xuesong</p>
            </body>
            </html>
            """;
        System.out.println(html);
    }
}
3.8、CharSequence增强

CharSequence增加 isEmpty() 方法,实际上也就是StringBuffer,StringBuilder 等实现类都增加了该方法。

/**
 * JAVA15 CharSequence增加 isEmpty() 方法
 */
public class CharSequenceTest {
    public static void main(String[] args) {
        // CharSequence 的具体是实现类都增加了isEmpty()方法
        StringBuffer stringBuffer = new StringBuffer();
        System.out.println(stringBuffer.isEmpty());
        StringBuilder stringBuilder = new StringBuilder();
        System.out.println(stringBuilder.isEmpty());
    }
}

四、Java21新特性

4.1、String Templates 功能简化了字符串的编写和维护,使开发人员可以更轻松地在 Java 代码中生成复杂的字符串。
4.2、Record Patterns 功能简化了数据查询,使开发人员可以更轻松地从记录类中提取数据。
4.3Pattern Matching for switch 功能简化了复杂的数据查询,使开发人员可以更轻松地从 switch 语句中提取数据。
4.4Virtual Threads 功能提高了并发应用程序的性能,使开发人员可以更轻松地编写高性能的并发应用程序。
4.5Scoped Values 功能简化了线程间数据共享,使开发人员可以更轻松地在线程之间共享不可变数据。

参考:

​​​​​​​java21新特性 - 代码层面

Java最新技术介绍和分析 (202305) - 知乎

;