2025-08-11 09:29:08 +08:00
..
2025-08-11 09:29:08 +08:00
2025-08-11 09:29:08 +08:00
2025-08-05 18:53:13 +08:00
2025-08-05 18:53:13 +08:00

Java 9 主要新特性


1. 模块系统 (Module System / Jigsaw项目)

  1. Java 9引入了模块系统这是Java 9最重要的特性之一。通过module-info.java文件定义模块可以更好地控制代码的封装和依赖关系。
    示例代码:

      // module-info.java
      module java9.example {
      // 导出包供其他模块使用
      exports top.yexuejc.demo;
    
          // 声明需要使用的模块
          requires java.base;
      }
    
  2. 模块声明语法 使用 module 关键字声明模块名 使用 exports 导出包,使其他模块可以访问 使用 requires 声明对其他模块的依赖

  3. 模块类型 系统模块Java平台自带的模块java.basejava.desktop 等 应用程序模块:用户自定义的模块 自动模块传统JAR文件在模块路径上的自动模块化表示 未命名模块传统的classpath行为

  4. 完整的模块指令 * exports package:导出包(公开) * exports package to module:限定导出给特定模块 * requires module:依赖模块 * requires transitive module:传递依赖 * uses service:声明使用的服务 * provides service with impl:提供服务实现 * opens package:开放包反射访问 * opens package to module:限定开放包给特定模块

  5. 编译和运行 使用模块系统编译和运行Java程序

     编译
    javac --module-path lib -d mods src/main/java/module-info.java src/main/java/top/yexuejc/demo/*.java
    
    # 运行
    java --module-path mods -m demo.java.example/top.yexuejc.demo.Main
    

2. 接口中的私有方法

Java 9允许在接口中定义私有方法提高代码复用性。

示例代码:

public interface MyInterface {
    private void privateMethod() {
        System.out.println("Java 9 允许在接口中定义私有方法");
    }

    default void publicMethod() {
        privateMethod(); // 调用私有方法
        System.out.println("Java 9 接口私有方法示例");
    }
}

3. 集合工厂方法

Java 9为List、Set和Map接口添加了静态工厂方法of()来创建不可变集合。

示例代码:

public static void main(String[] args) {
    java.util.List<String> list = java.util.List.of("a", "b", "c");
    java.util.Map<String, Integer> map = java.util.Map.of("one", 1, "two", 2);
    System.out.println("List: " + list);
    System.out.println("Map: " + map);
}

4. Process API增强

新增了ProcessHandle接口可以更好地管理和控制操作系统进程。

示例代码:

public static void main(String[] args) {
    ProcessHandle currentProcess = ProcessHandle.current();
    System.out.println("Current Process ID: " + currentProcess.pid());
}

5. try-with-resources改进

Java 9允许在try-with-resources语句中使用 effectively final 变量。

示例代码:

public static void main(String[] args) {
    MyResource resource = new MyResource();
    try (resource) {
        resource.use();
    }
}

6. JShell (交互式Java REPL)

Java 9引入了交互式Java解释器可以在命令行中直接执行Java代码。

使用方法:

bash
jshell

项目结构


src/
├── main/
│   ├── java/
│   │   ├── top/
│   │   │   └── yexuejc/
│   │   │       └── demo/
│   │   │           ├── Main.java
│   │   │           ├── MyInterface.java
│   │   │           └── MyResource.java
│   │   └── module-info.java

运行项目

确保已安装Java 9或更高版本

bash
mvn compile
mvn exec:java -Dexec.mainClass="top.yexuejc.demo.Main"

其他Java 9特性

  • HTTP/2 Client (孵化阶段)
  • Multi-Resolution Images API
  • @Deprecated注解增强
  • Stack Walking API
  • Reactive Streams API (Flow API)
  • 改进的Javadoc支持HTML5
  • 统一的JVM日志系统
  • javac工具的改进

参考资料