Java 9 – 终极特性列表("Java 9 全新特性大盘点:终极功能一览")
原创
一、概述
Java 9 是 Java 语言的一个重要版本,于 2017 年 9 月 21 日正式发布。这个版本带来了许多激动人心的特性和改进,包括模块化系统、改进的 JShell、扩大的集合框架等。本文将为您详细介绍 Java 9 的首要新特性。
二、模块化系统(Project Jigsaw)
Java 9 引入了模块化系统,这是 Java 9 最引人注目的特性之一。模块化系统旨在让 Java 应用程序变得更加轻量级和易于维护。
1. 模块的定义
模块是 Java 代码的一个逻辑单元,它包含一组相关的类和资源。模块可以通过一个名为 module-info.java
的文件进行定义。
module com.example.myapp {
requires java.base;
requires java.logging;
exports com.example.myapp;
}
2. 模块的依靠关系
模块之间可以有依靠关系,通过 requires
关键字声明。上面的例子中,com.example.myapp
模块依靠于 java.base
和 java.logging
模块。
3. 模块的导出
模块可以通过 exports
关键字导出包,允许其他模块可以访问这些包中的类和资源。
三、JShell(Project JEP 222)
JShell 是 Java 9 的一个交互式命令行工具,允许开发者迅捷测试代码片段,无需编写完整的 Java 程序。它类似于 Python 的交互式解释器。
jshell> /import java.util.List;
jshell> List
names = List.of("Alice", "Bob", "Charlie"); jshell> names.forEach(System.out::println);
Alice
Bob
Charlie
四、集合工厂方法
Java 9 为集合框架添加了新的工厂方法,用于创建不可变集合,这些方法可以减少不可变集合创建的样板代码。
List
names = List.of("Alice", "Bob", "Charlie"); Set
namesSet = Set.of("Alice", "Bob", "Charlie"); Map
namesMap = Map.of("Alice", 1, "Bob", 2, "Charlie", 3);
五、改进的 Stream API
Java 9 对 Stream API 进行了改进,添加了新的方法,允许流操作更加方便。
1. takeWhile 和 dropWhile 方法
这两个方法允许你通过某个条件来取或丢弃流中的元素。
List
numbers = List.of(1, 2, 3, 4, 5, 6); Stream
stream = numbers.stream(); List
takeWhileResult = stream.takeWhile(n -> n < 5).collect(Collectors.toList()); List
dropWhileResult = stream.dropWhile(n -> n < 5).collect(Collectors.toList()); takeWhileResult: [1, 2, 3, 4]
dropWhileResult: [5, 6]
2. ofNullable 方法
该方法允许你创建一个包含单个非空元素的 Optional。
Optional
optional = Optional.ofNullable("Hello");
六、改进的 Process API
Java 9 对 Process API 进行了改进,提供了更好的进程管理能力。
ProcessBuilder processBuilder = new ProcessBuilder("ls", "-l");
Process process = processBuilder.start();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
七、改进的 HTTP 客户端 API
Java 9 引入了一个新的 HTTP 客户端 API,用于替代旧的 HttpURLConnection
类。
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://www.example.com"))
.build();
HttpResponse
response = client.send(request, BodyHandlers.ofString()); System.out.println(response.body());
八、改进的文件系统 API
Java 9 对文件系统 API 进行了改进,增多了对文件系统属性的拥护。
Path path = Paths.get("/path/to/file.txt");
Files.setAttribute(path, "basic:charset", StandardCharsets.UTF_8);
九、其他特性
除了上述首要特性外,Java 9 还包括以下一些其他特性:
1. 私有接口方法
Java 9 允许在接口中定义私有方法,这些方法可以在接口内部进行重用。
public interface MyInterface {
private void privateMethod() {
// ...
}
default void defaultMethod() {
privateMethod();
}
}
2. try-with-resources 的扩大
Java 9 允许在 try-with-resources 语句中声明多个资源。
try (Resource resource1 = new Resource(); Resource resource2 = new Resource()) {
// ...
}
3. 反射的扩大
Java 9 对反射 API 进行了扩大,提供了更多的方法和功能。
十、总结
Java 9 带来了许多令人兴奋的新特性和改进,这些特性能帮助开发者编写更高效、更易于维护的代码。从模块化系统到改进的 API,Java 9 无疑是 Java 语言的一个重要里程碑。