146 lines
4.3 KiB
Markdown
146 lines
4.3 KiB
Markdown
|
||
## 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)
|
||
```
|