2022 年 7 月底,甲骨文正式停止对Java SE 7的扩展支持,一个有着近 11 年历史的 Java 标准版本迎来生命周期结束。
目前最新版本的 Java18 于今年 3 月正式发布,并将于 2022 年 9 月停止更新。现在还提供支持的长期支持版本包括 Java 8、Java 11 和 Java 17,它们各自的支持结束时间分别为 2030 年 12 月、2026 年 9 月和 2029 年 9 月。
一 . Java 17
Java 8 ,可以说是一个里程碑的版本,提供了很多实打实有用的新特性,无论的Lambda表达式、Stream流、Optional还是新时间日期API等,都改变了开发者的编程习惯,它的支持结束时间为30年12月也可见其地位。
同样大家可以发现,Java 17 也是一个长期支持版本,那其是否可代替Java 8、Java 11 两个LTS成为生产常用版本呢,我们看一下它的新特性。
1. Java 17 新特性
-
306:恢复始终严格的浮点语义
-
356:增强型伪随机数发生器
-
382:新的 macOS 渲染管道
-
391:macOS/AArch64 端口
-
398:弃用即将删除的 Applet API
-
403:强封装JDK的内部API
-
406:Switch模式匹配(预览)
-
407:删除 RMI 激活
-
409:密封类
-
410:删除实验性 AOT 和 JIT 编译器
-
411:弃用即将删除安全管理器
-
412:外部函数和内存 API(孵化器)
-
414:Vector API(第二次进行特性孵化)
-
415:特定于上下文的反序列化过滤器
1)、409密封类
//类 Shape 被关键字 sealed 修饰,表明它是一个密封类。
//这个密封类必须要指定它被哪些类继承
public abstract sealed class Shape permits Circle{}
//Circle 类必须用 final 关键字修饰,表明它不能再被其他类继承了
public final class Circle extends Shape {}
2)、增强型伪随机数生成器
Java 17为伪随机数生成器(PRNG)提供了新的接口类型和实现。它引入了一个名为RandomGenerator的新接口。该接口的目标是为所有现有和新的PRNG提供统一的API。
RandomGenerator提供名为ints、longs、doubles、nextBoolean、nextInt、nextLong、nextDouble和nextFloat的方法,以及它们当前的所有参数变化。以下是提供的四个新的专用随机发生器接口:
- SplittableRandomGenerator
- JumpableRandomGenerator
- LeapableRandomGenerator
- ArbitrarilyJumpableRandomGenerator
此功能的目标是:
- 使各种PRNG算法更容易在应用中互换使用。
- 通过提供PRNG对象流,更好地支持基于流的编程。
- 消除现有PRNG类中的代码重复。
- 小心地保留java.util.Random
3)、为 switch 支持模式匹配。
switch (o) {
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 -> o.toString();
};
未完