提示

本文主要讲解 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 对开发人员更具吸引力。

# 参考