4.3 KiB
Java 9 主要新特性
1. 模块系统 (Module System / Jigsaw项目)
-
Java 9引入了模块系统,这是Java 9最重要的特性之一。通过module-info.java文件定义模块,可以更好地控制代码的封装和依赖关系。
示例代码:// module-info.java module java9.example { // 导出包供其他模块使用 exports top.yexuejc.demo; // 声明需要使用的模块 requires java.base; }
-
模块声明语法 使用
module
关键字声明模块名 使用exports
导出包,使其他模块可以访问 使用requires
声明对其他模块的依赖 -
模块类型 系统模块:Java平台自带的模块,如
java.base
、java.desktop
等 应用程序模块:用户自定义的模块 自动模块:传统JAR文件在模块路径上的自动模块化表示 未命名模块:传统的classpath行为 -
完整的模块指令 *
exports package
:导出包(公开) *exports package to module
:限定导出给特定模块 *requires module
:依赖模块 *requires transitive module
:传递依赖 *uses service
:声明使用的服务 *provides service with impl
:提供服务实现 *opens package
:开放包反射访问 *opens package to module
:限定开放包给特定模块 -
编译和运行 使用模块系统编译和运行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工具的改进
参考资料