## 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)
```