目录
1. 模块系统(Jigsaw)
作用:实现模块化开发,解决"JAR地狱"问题,增强封装性和安全性。
应用场景:大型项目依赖管理。
代码示例:
// 模块声明文件: module-info.java
module com.example.myapp {
requires java.base; // 引入基础模块
requires java.sql; // 引入SQL模块
exports com.example.util; // 导出工具包
}
2. JShell(REPL工具)
作用:交互式命令行工具,即时执行代码片段。
应用场景:快速验证算法或API用法。
代码示例:
jshell> int a = 10;
a ==> 10
jshell> String s = "Hello";
s ==> "Hello"
jshell> System.out.println(s + " Java " + a);
Hello Java 10
3. 集合工厂方法
作用:快速创建不可变集合(List/Set/Map)。
应用场景:初始化配置或常量集合。
代码示例:
List<String> colors = List.of("Red", "Green", "Blue");
Set<Integer> primes = Set.of(2, 3, 5, 7);
Map<String, Integer> scores = Map.of("Alice", 90, "Bob", 85);
// 尝试修改会抛出 UnsupportedOperationException
colors.add("Yellow"); // ❌ 运行时异常
4. 接口私有方法
作用:在接口内封装重复逻辑,提高代码复用性。
应用场景:接口默认方法的辅助方法。
代码示例:
public interface Calculator {
default int add(int a, int b) {
return a + b;
}
default int multiply(int a, int b) {
return a * b;
}
// 私有方法
private void log(String operation) {
System.out.println("执行操作: " + operation);
}
}
5. Stream API 增强
特性:takeWhile()
/dropWhile()
/iterate()
改进。
应用场景:流式数据处理。
代码示例:
List<Integer> numbers = List.of(2, 4, 6, 8, 9, 10);
// takeWhile: 遇到不满足条件时终止
List<Integer> evenBeforeOdd = numbers.stream()
.takeWhile(n -> n % 2 == 0)
.collect(Collectors.toList()); // [2, 4, 6, 8]
// iterate: 带终止条件的生成
IntStream.iterate(0, i -> i < 5, i -> i + 1)
.forEach(System.out::print); // 输出: 01234
6. HTTP/2 客户端(Incubator)
作用:支持HTTP/2协议和WebSocket。
应用场景:高性能网络请求。
代码示例:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println);
7. 多版本JAR包
作用:同一JAR支持不同Java版本。
应用场景:向后兼容。
目录结构:
myapp.jar
├── META-INF
│ └── versions/9
│ └── com/example/NewFeature.class # Java 9专用类
└── com/example
└── Main.class # 通用类
总结
Java 9 通过模块化重构了Java生态,同时提供:
- 开发效率工具(JShell)
- 语法糖(集合工厂方法)
- 工程化支持(接口私有方法)
- 性能优化(HTTP/2、Stream增强)
建议在微服务架构或大型系统中优先采用模块化设计。