JDK9新特性

Java 9(Java SE 9)在2017年发布,标志着Java平台的重要转折点,引入了模块系统(JPMS)等重大特性。

1.模块系统(JPMS, Java Platform Module System)

引入模块来封装代码和数据,提高可维护性和安全性。模块由module-info.java描述。

// module-info.java 示例
module com.example.myModule {
    requires java.base;
    exports com.example.myPackage;
}

2.JShell - 交互式Java REPL

允许直接在命令行中编写和执行Java代码片段,无需创建类结构。

jshell> int x = 10;
x ==> 10
jshell> x + 20
$2 ==> 30

3.私有接口方法

允许在接口中定义私有方法,便于复用代码。

interface MyInterface {
    default void publicMethod() {
        privateHelperMethod();
    }

    private void privateHelperMethod() {
        // 实现细节
    }
}

4.改进的Stream API

添加了takeWhile, dropWhile, ofNullable等方法,增强流处理能力。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
       .takeWhile(n -> n < 4)
       .forEach(System.out::println);

5.响应式流(Flow API)

支持按照Reactive Streams规范构建非阻塞的背压式流处理系统。

6.改进的进程API

新增ProcessHandle类,提供更丰富的进程管理能力。

ProcessHandle current = ProcessHandle.current();
long pid = current.pid();
System.out.println("Current process PID: " + pid);

7.改进的垃圾回收器接口

引入GarbageCollectorMXBean,提供更详细的垃圾回收器信息。

8.改进的Javadoc工具

支持HTML5输出,增强文档的易读性和可访问性。

9.Multi-Release JARs

支持在同一个JAR文件中包含针对不同Java版本的类,以便向前兼容。

10.改进的字符串处理

引入String.strip()repeat()lines()等方法。

String s = " Hello World! ";
System.out.println(s.strip()); // 输出"Hello World!"

11.改进的Optional类

添加Optional.or()ifPresentOrElse()等方法,使Optional的使用更加灵活。

Optional<String> optional = Optional.empty();
String result = optional.orElse("default");
System.out.println(result); // 输出"default"

12.改进的集合工厂方法

List.of(), Set.of(), Map.of()等静态工厂方法,创建不可变集合更便捷。

List<String> list = List.of("a", "b", "c");

13.改进的Try-with-resources

支持多个资源自动关闭,无需嵌套。

try (
    BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
    BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))
) {
    // 操作
} catch (IOException e) {
    e.printStackTrace();
}

14.改进的编译器诊断信息

提供更清晰、更有帮助的错误和警告信息。