2025-08-05 18:53:13 +08:00

146 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 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)文件定义模块,可以更好地控制代码的封装和依赖关系。
<br>__示例代码__
```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<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接口可以更好地管理和控制操作系统进程。
示例代码:
```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)
```