JDK 17 是一个长期支持(LTS)版本,包含了许多新特性和改进。以下是JDK 17 的主要新特性及其详细介绍:
1. JEP 306: Restore Always-Strict Floating-Point Semantics
- 恢复严格的浮点语义,使得所有浮点运算都严格遵循 IEEE 754 标准。这意味着
strictfp
关键字不再有实际效果,所有浮点操作都将严格执行。
2. JEP 356: Enhanced Pseudo-Random Number Generators
- 引入了一组新的接口和实现,以增强伪随机数生成器的灵活性和可用性。新的随机数生成器可以通过
RandomGenerator
接口来访问,提供了更好的随机数生成功能。
RandomGenerator random = RandomGeneratorFactory.of("L64X128MixRandom").create();
int randomInt = random.nextInt();
3. JEP 382: New macOS Rendering Pipeline
- 在 macOS 上使用 Apple 的 Metal API 作为默认的 2D 渲染管道,替代了旧的 OpenGL 管道,从而提高渲染性能和兼容性。
4. JEP 391: macOS/AArch64 Port
- 增加了对 macOS 上运行的 AArch64(ARM64)架构的支持,使得 Java 可以在苹果 M1 芯片上运行。
5. JEP 398: Deprecate the Applet API for Removal
- 将 Applet API 标记为过时,并计划在未来版本中删除。这意味着 Applet 技术将逐渐退出历史舞台,建议开发者迁移到更现代的技术。
6. JEP 403: Strongly Encapsulate JDK Internals
- 强制性地封装 JDK 内部 API,不再允许访问内部包,除非显式打开。目的是提高模块化和安全性。
7. JEP 406: Pattern Matching for switch (Preview)
- 为
switch
语句引入模式匹配功能,使得switch
语句可以根据类型模式进行匹配,从而简化代码。
public String format(Object obj) {
return switch (obj) {
case Integer i -> String.format("int %d", i);
case Long l -> String.format("long %d", l);
case Double d -> String.format("double %f", d);
case String s -> String.format("String %s", s);
default -> obj.toString();
};
}
8. JEP 407: Remove RMI Activation
- 移除 RMI 激活功能,该功能在实际应用中很少使用。RMI(远程方法调用)仍然存在,但激活功能被删除。
9. JEP 409: Sealed Classes
- 引入密封类(sealed classes),允许类或接口限制哪些其他类可以扩展或实现它,从而提供更强的封装和控制。
public abstract sealed class Shape
permits Circle, Rectangle, Square {}
public final class Circle extends Shape {}
public final class Rectangle extends Shape {}
public final class Square extends Shape {}
10. JEP 411: Deprecate the Security Manager for Removal
- 将安全管理器(Security Manager)标记为过时,并计划在未来版本中移除。建议开发者使用更现代的安全措施。
11. JEP 412: Foreign Function & Memory API (Incubator)
- 引入了外部函数和内存 API,允许 Java 程序调用非 Java 代码(例如 C 代码)和安全地操作本地内存。这是一个孵化器项目,尚未最终确定。
12. JEP 414: Vector API (Second Incubator)
- 提供矢量计算 API,以便更高效地执行矢量化计算。这是 API 的第二个孵化版本,提供了改进的性能和功能。
13. JEP 415: Context-Specific Deserialization Filters
- 允许在反序列化过程中为特定上下文设置过滤器,从而提高安全性和灵活性,防止反序列化漏洞。
这些新特性和改进使得 JDK 17 在性能、安全性、功能和开发体验上都有了显著提升,为开发者提供了更强大的工具和更安全的编程环境。