目录
3.6、Nashorn JavaScript Engine被移除 :
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新特性 - 代码层面