本文目录导读:

- 模块化系统(最重要特性)
- JShell(交互式编程工具)
- 私有接口方法
- 集合工厂方法(of 方法)
- Stream API 增强
- Optional 增强
- 进程 API 改进
- 改进的 try-with-resources
- HttpClient(标准化)
- 钻石操作符改进
- 接口中的私有方法(详细示例)
Java 9 最重要的特性是模块化系统(Project Jigsaw),但也包含了许多其他实用特性,下面用具体案例来演示主要新特性:
模块化系统(最重要特性)
模块定义 (module-info.java):
// com.example.myapp/module-info.java
module com.example.myapp {
requires java.sql;
requires transitive java.logging;
exports com.example.myapp.api;
uses com.example.myapp.spi.ServiceProvider;
}
使用模块的示例:
// 模块A的定义
module com.example.util {
exports com.example.util.strings;
exports com.example.util.collections;
}
JShell(交互式编程工具)
$ jshell
| 欢迎使用 JShell -- 版本 9
| 要大致了解该版本, 请键入: /help intro
jshell> int add(int a, int b) {
...> return a + b;
...> }
| 已创建 方法 add(int,int)
jshell> add(5, 3)
$1 ==> 8
jshell> /exit
私有接口方法
public interface Calculator {
// Java 9 允许接口中的私有方法
default int addNumbers(int... nums) {
return calculate(nums, 0);
}
default int multiplyNumbers(int... nums) {
return calculate(nums, 1);
}
// 私有方法(Java 9 新特性)
private int calculate(int[] nums, int initial) {
int result = initial;
for (int num : nums) {
if (initial == 0) {
result += num;
} else {
result *= num;
}
}
return result;
}
}
集合工厂方法(of 方法)
import java.util.*;
public class CollectionFactoryExample {
public static void main(String[] args) {
// 创建不可变集合
List<String> list = List.of("Java", "Python", "JavaScript");
Set<Integer> set = Set.of(1, 2, 3, 4, 5);
Map<String, Integer> map = Map.of("one", 1, "two", 2);
// 创建 Map 的高级方法(超过10个键值对)
Map<String, Integer> largeMap = Map.ofEntries(
Map.entry("a", 1),
Map.entry("b", 2),
// ... 更多条目
Map.entry("z", 26)
);
System.out.println(list);
System.out.println(set);
System.out.println(map);
}
}
Stream API 增强
import java.util.stream.Stream;
public class StreamEnhancements {
public static void main(String[] args) {
// takeWhile: 获取满足条件的元素直到第一个不满足条件
Stream.of(1, 2, 3, 4, 5, 6, 7, 8)
.takeWhile(n -> n < 5)
.forEach(System.out::print); // 输出: 1234
System.out.println();
// dropWhile: 丢弃满足条件的元素直到第一个不满足条件
Stream.of(1, 2, 3, 4, 5, 6, 7, 8)
.dropWhile(n -> n < 5)
.forEach(System.out::print); // 输出: 5678
System.out.println();
// ofNullable: 避免空指针
Stream.ofNullable(null)
.forEach(System.out::println); // 不输出任何内容
// iterate 重载
Stream.iterate(1, n -> n < 100, n -> n * 2)
.forEach(n -> System.out.print(n + " ")); // 1 2 4 8 16 32 64
}
}
Optional 增强
import java.util.Optional;
import java.util.stream.Stream;
public class OptionalEnhancements {
public static void main(String[] args) {
// ifPresentOrElse: 如果存在则执行一个操作,否则执行另一个操作
Optional<String> optional = Optional.of("Hello");
optional.ifPresentOrElse(
value -> System.out.println("Value: " + value),
() -> System.out.println("Value is empty")
);
// or: Optional 为空则返回另一个 Optional
Optional<String> empty = Optional.empty();
Optional<String> fallback = empty.or(() -> Optional.of("Default"));
System.out.println(fallback.get()); // 输出: Default
// stream: 将 Optional 转换为 Stream
Optional<String> opt = Optional.of("Java");
opt.stream().forEach(System.out::println);
}
}
进程 API 改进
import java.lang.ProcessHandle;
import java.util.stream.Collectors;
public class ProcessAPIExample {
public static void main(String[] args) {
// 获取当前进程信息
ProcessHandle currentProcess = ProcessHandle.current();
System.out.println("当前进程 PID: " + currentProcess.pid());
System.out.println("当前进程信息: " + currentProcess.info());
// 获取所有运行中的进程
ProcessHandle.allProcesses()
.forEach(process -> {
System.out.printf("PID: %d, Command: %s%n",
process.pid(),
process.info().command().orElse("unknown"));
});
}
}
改进的 try-with-resources
import java.io.BufferedReader;
import java.io.FileReader;
public class TryWithResourcesExample {
public static void main(String[] args) {
// Java 9: 可以在 try 中使用已有变量
BufferedReader reader = new BufferedReader(new FileReader("test.txt"));
// 之前需要声明在 try 中,现在可以直接使用
try (reader) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
HttpClient(标准化)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;
public class HttpClientExample {
public static void main(String[] args) throws Exception {
// 同步请求
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.github.com/users/octocat"))
.GET()
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println("响应状态码: " + response.statusCode());
System.out.println("响应体: " + response.body());
// 异步请求
CompletableFuture<HttpResponse<String>> future =
client.sendAsync(request, HttpResponse.BodyHandlers.ofString());
future.thenAccept(res -> {
System.out.println("异步响应: " + res.body());
}).join();
}
}
钻石操作符改进
// Java 9 允许在匿名类中使用钻石操作符
public class DiamondOperatorImprovement {
public static void main(String[] args) {
// 以前不允许,现在可以
Comparator<String> comparator = new Comparator<>() {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
};
}
}
接口中的私有方法(详细示例)
interface StringHelper {
// 默认方法
default String reverse(String input) {
return process(input, true);
}
default String removeVowels(String input) {
return process(input, false);
}
// 私有方法(Java 9 新特性)
private String process(String input, boolean reverseStr) {
String result = input.toLowerCase();
if (reverseStr) {
return new StringBuilder(result).reverse().toString();
}
return result.replaceAll("[aeiou]", "");
}
// 静态方法也可以有私有方法
static String toUpperCase(String input) {
return processStatic(input);
}
private static String processStatic(String input) {
return input.toUpperCase();
}
}
这些是 Java 9 的主要特性示例,模块化系统是最重要的变更,而其他特性如集合工厂方法、Stream 增强、私有接口方法等都是日常开发中非常有用的改进。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播