Java Development Kit (JDK) 21 是一个重要的版本,它引入了许多新特性和改进,旨在提高开发效率和语言的表达能力。以下是 35 个 JDK 21 的新特性,附带代码示例,帮助开发者更好地理解这些变化。
1. 模式匹配(Pattern Matching for Switches)
模式匹配的引入使得 switch 语句可以更灵活高效地处理不同类型的案例。以下是一个示例:
public class ShapeProcessor {
public static String processShape(Object shape) {
return switch (shape) {
case Circle c -> "Circle with radius: " + c.getRadius();
case Rectangle r -> "Rectangle with width: " + r.getWidth() + " and height: " + r.getHeight();
default -> "Unknown shape";
};
}
}
2. 虚拟线程(Virtual Threads)
虚拟线程的引入显著提高了多线程编程的简易性,允许开发者轻松创建大量线程,而不必担心传统线程的高度开销。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class VirtualThreadsExample {
public static void main(String[] args) {
try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 0; i < 1000; i++) {
executor.submit(() -> {
System.out.println("Hello from virtual thread!");
});
}
}
}
}
3. 外部函数和内存 API(Foreign Function & Memory API)
该特性允许 Java 程序直接调用本地代码和访问外部内存,减少 JNI(Java Native Interface)的使用。
import jdk.incubator.foreign.*;
public class ForeignMemoryExample {
public static void main(String[] args) {
MemorySegment segment = MemorySegment.allocateNative(10);
segment.set(MemoryLayouts.JAVA_INT, 0, 42);
int value = segment.get(MemoryLayouts.JAVA_INT, 0);
System.out.println("Value in foreign memory: " + value);
}
}
4. 集合 API 增强(Collection API Enhancements)
JDK 21 引入了一些新的方法来改进集合类的工作方式,如 Set.of()
和 Map.ofEntries()
。
import java.util.Map;
public class CollectionEnhancementExample {
public static void main(String[] args) {
var map = Map.ofEntries(
Map.entry("key1", "value1"),
Map.entry("key2", "value2"));
System.out.println(map);
}
}
5. 字符串方法改进(String Methods Enhancement)
新增加了一些字符串处理方法,使字符串处理更加高效和方便。
public class StringEnhancement {
public static void main(String[] args) {
String text = " Hello, World! ";
System.out.println(text.strip()); // 移除前后空格
}
}
6. 增强的 switch 表达式(Enhanced Switch Expressions)
改进了 switch 表达式,支持 yield 语句来返回值。
public class EnhancedSwitch {
public static void main(String[] args) {
int day = 2;
String dayName = switch (day) {
case 1 -> "Monday";
case 2 -> "Tuesday";
case 3 -> "Wednesday";
default -> throw new IllegalStateException("Invalid day: " + day);
};
System.out.println(dayName);
}
}
7. 记录类(Record Class)增强
记录类提供了一种简洁的方式来定义数据载体,JDK 21 进一步增强了记录类的功能。
public record Point(int x, int y) {
public Point {
if (x < 0 || y < 0) {
throw new IllegalArgumentException("Coordinates must be non-negative");
}
}
}
8. 改进的异常处理(Improved Exception Handling)
JDK 21 加强了异常处理的能力,使其可以更好地处理异常情况。
public class ExceptionHandling {
public static void main(String[] args) {
try {
Integer.parseInt("NotANumber");
} catch (NumberFormatException e) {
System.out.println("Invalid number format: " + e.getMessage());
}
}
}
9. 针对 Null 安全的增强功能
新的语言特性帮助开发者更安全地处理 null 值,减少空指针异常。
public class NullSafety {
public static void main(String[] args) {
String str = null;
if (str != null) {
System.out.println(str.length());
}
}
}
10. 其他特性
JDK 21 还包括其他众多特性,如改进的编译器性能、新的 API、工具集成等。
总结
JDK 21 包含的这些新特性和改进,使得 Java 开发者的工作变得更加高效和便利。从虚拟线程到外部函数 API,每一个特性都在推动现代 Java 的发展。开发者应及时了解和掌握这些新特性,以便在实际开发中充分利用它们,提高代码的质量和运行效率。