提示
本文主要讲解 Java 10 的新特性。@ermo
# Java 10 新特性
# 本地变量类型推断(Local-Variable Type Inference)
在开发代码的过程中,开发人员经常要编写大量重复的本地变量声明的模板代码。
很多情况下,显示声明变量毫无必要,本次 Java 9 对本地变量的更新就是可以使用 var
关键字来声明本地变量,这是一种语法糖,编译器在编译过程中会自动进行类型推断。
需要知道的是,使用 var
声明的本地变量必须要初始化。
允许出现的位置:
- 局部变量初始化
- for 循环索引变量
- 传统的 for 循环声明变量
下文为示例代码。
public void some() {
// 本地变量声明
var age = 12;
var numbers = List.of(1, 2, 3, 4, 5);
// forEach 语法糖
for (var n : numbers) {
System.out.println(n);
}
// 传统的 for 循环变量声明
for (var i = 0; i < numbers.size(); i++) {
System.out.println(numbers.get(i));
}
}
var
不允许出现的位置:
- 方法形参
- 方法返回值
- 构造器形参
- 字段
- 异常捕获 catch 形参
下文为错误的使用示例。
// 'var' is not allowed here
// 方法形参类型
public void say(var name) {
}
// 方法返回类型
public var say() {
}
public class LocalVarExample {
// 构造器形参
public LocalVarExample(var num) {
}
// 字段声明
private var name = "Java";
}
public void say() throws FileNotFoundException {
FileOutputStream out = new FileOutputStream("ermo.txt");
try(out) {
String data = "Something";
out.write(data.getBytes());
} catch(var e) { // 异常捕获 catch 形参类型
e.printStackTrace();
}
}
# 整合 JDK 仓库
为简化开发,将众多的 JDK 仓库合并为一个仓库。
# 垃圾回收器接口(GC Interface)
新增垃圾回收器接口,GC 开发人员可以实现垃圾回收器接口去开发更多的定制化内容。有了垃圾回收器接口,可以将 JDK 和 GC 隔离,虚拟机内部的 GC 核心代码更容易模块化。
# 针对 G1 的并行 Full GC(Parallel GC for G1)
G1 是 Java 9 的默认垃圾回收器。本次更新就是将 G1 回收器在 full GC 的时候并行执行,可以最大程度降低 GC 时对用户的影响。
# 局部线程管控(Thread-Local Handshakes)
和以前的区别是,无需停止全部线程,可以成本更低得停止单个线程。在不运行全局虚拟机安全点的情况下实现线程回调,局部线程管控操作最终是为了降低虚拟机延迟。
# 删除 Native-Header 生成工具
从 JDK 中删除 javah
生成工具,该功能已经被 java 8 中的 javac
高级功能取代。
# 根证书(Root Certificates)
在 JDK 中新增默认根证书,使得 OpenJDK 对开发人员更具吸引力。