## Java 9 主要新特性 --- ### 1. 模块系统 (Module System / Jigsaw项目) 1. Java 9引入了模块系统,这是Java 9最重要的特性之一。通过[module-info.java](file://F:\coding\java-learning\demo2\java9-example\src\main\java\module-info.java)文件定义模块,可以更好地控制代码的封装和依赖关系。
__示例代码:__ ```java // module-info.java module java9.example { // 导出包供其他模块使用 exports top.yexuejc.demo; // 声明需要使用的模块 requires java.base; } ``` 2. 模块声明语法 使用 `module` 关键字声明模块名 使用 `exports` 导出包,使其他模块可以访问 使用 `requires` 声明对其他模块的依赖 3. 模块类型 系统模块:Java平台自带的模块,如 `java.base`、`java.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程序: ```bash 编译 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允许在接口中定义私有方法,提高代码复用性。 示例代码: ```java 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()`来创建不可变集合。 示例代码: ```java public static void main(String[] args) { java.util.List list = java.util.List.of("a", "b", "c"); java.util.Map map = java.util.Map.of("one", 1, "two", 2); System.out.println("List: " + list); System.out.println("Map: " + map); } ``` ### 4. Process API增强 新增了ProcessHandle接口,可以更好地管理和控制操作系统进程。 示例代码: ```java 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 变量。 示例代码: ```java 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特性](README-other.md) - HTTP/2 Client (孵化阶段) - Multi-Resolution Images API - @Deprecated注解增强 - Stack Walking API - Reactive Streams API (Flow API) - 改进的Javadoc支持HTML5 - 统一的JVM日志系统 - javac工具的改进 ## 参考资料 - [Oracle Java 9 Documentation](https://docs.oracle.com/javase/9/) - [Java Platform, Standard Edition Documentation](https://docs.oracle.com/javase/9/docs/api/overview-summary.html) ```