Java9
- jshell
- 接口私有方法
- 优化了 try with resource
- 不支持 _ 作为变量名
- String 内部从 char 存储改为 byte 存储
- 模块分组
- Stream 加强
- 集合加强
- List.of()
- Map.of()
- copyOf()
Java10
- 用了 var 来进行自动推导类型
Java 11 (LTS)
- String.strip 用来去除首尾空格,还能除去 unicode 编码的空白字符
- String.isBlank 判断字符串是否为 0 或者空格等空白字符
- String.repeat(n) 字符串重复
- Optional 加强
- InputStream.t5ransferTo
- HTTP Client API 正式版
Java 12
- switch 优化
case 3,4,5 -> System.out.println("spring");
Java 13
switch 支持返回值
支持
""" """
来创建字符串,支持分行 (python 以前的特性)
Java 14
instanceof 模式匹配
NullPointerException 更好的 null 提示
record 类型
- 状态描述中的每个组件都有对应的private final字段。
- 状态描述中的每个组件都有对应的public访问方法。方法的名称与组件名称相同。
- 一个包含全部组件的公开构造器,用来初始化对应组件。
- 实现了equals()和hashCode()方法。equals()要求全部组件都必须相等。
- 实现了toString(),输出全部组件的信息。
Java 15
- Sealed Classes
- 如果指定模块的话,sealed class 和其子类必须在同一个模块下。如果没有指定模块,则需要在同一个包下。
- sealed class 指定的子类必须直接继承该sealed class。
- sealed class 的子类要用 final 修饰。
- sealed class 的子类如果不想用 final 修饰的话,可以将子类声明为sealed class。
- CharSequence 新增了 isEmpty() 方法
- TreeMap 新增方法
- putIfAbsent
- computeIfAbsent
- computeIfPresent
- compute
- merge
- “”” 成为正式功能
Java 16
- 包装类构造方法的警告
- 新增日时段
- InvocationHandler.invokeDefault
- Stream().toList()
Java 17 (LTS)
- switch 优化
- Sealed Classes 正式启用
- 伪随机数的变化,增加了伪随机相关的类和接口
- RandomGenerator
- RandomGeneratorFactory
- 去掉了 AOT 和 JIT
- AOT(Ahead-of-Time)
- GRaal
Java 18
- 默认使用 UTF-8
- -Dfile.encoding=UTF-8
- 支持简单的 web 服务器
- 标记将要废弃的方法
- Object.finalize
- Thread.stop
- @snippet 注解