Java 从 2014 年发布 Java 8 以来,已经经历了十多个版本的重大演进。从 Lambda 表达式到虚拟线程,从模块化系统到模式匹配,Java 已经从"啰嗦的老年人"蜕变为"现代化的强力语言"。本文系统梳理 Java 8 到最新版本的核心新特性,帮你快速掌握 Java 的进化脉络。
Java 8(2014.03):里程碑版本
Lambda 表达式与函数式接口
// 以前:匿名内部类
new Thread(new Runnable() {
@Override
public void run() { System.out.println("Hello"); }
}).start();
// Java 8:Lambda 表达式
new Thread(() -> System.out.println("Hello")).start();
// 方法引用
List names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(System.out::println); Stream API:声明式数据处理
List result = list.stream()
.filter(x -> x > 10) // 过滤
.map(x -> x * 2) // 转换
.sorted(Comparator.reverseOrder()) // 排序
.distinct() // 去重
.limit(5) // 截取
.collect(Collectors.toList()); Stream 的核心特点:惰性求值——中间操作不会立即执行,直到遇到终端操作;短路操作——limit() 和 findFirst() 可以提前终止遍历;并行流——parallelStream() 利用 ForkJoinPool 实现多核并行处理。
Optional:告别 NullPointerException
Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity)
.orElse("Unknown"); // 链式安全访问CompletableFuture:异步编程利器
CompletableFuture.supplyAsync(() -> fetchUser())
.thenApplyAsync(User::getOrders)
.thenAcceptAsync(orders -> System.out.println(orders.size()))
.exceptionally(e -> { log.error("Error", e); return null; });Java 9~11:模块化与增强
Java 9:模块化系统(Project Jigsaw)
// module-info.java
module com.example.myapp {
requires java.sql;
requires spring.boot;
exports com.example.api;
opens com.example.entity to spring.core;
}Java 10:局部变量类型推断(var)
var list = new ArrayList<String>();
var user = userService.getById(1L);Java 11:HttpClient 标准化
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());Java 12~17:Switch 表达式与记录类
Switch 表达式(Java 14)
String result = switch (day) {
case MONDAY, FRIDAY -> "工作日开始了";
case SATURDAY, SUNDAY -> { yield "周末愉快!"; }
default -> "普通的一天";
};Record 类(Java 16):消灭样板代码
public record User(Long id, String name, String email) {}
// 自动生成:构造函数、getter、equals()、hashCode()、toString()Sealed Classes(Java 17):精准的类型控制
public sealed interface Shape permits Circle, Rectangle, Triangle {}
public record Circle(double radius) implements Shape {}
public record Rectangle(double width, double height) implements Shape {}Java 21(LTS):虚拟线程革命
虚拟线程是 Java 21 最重磅的特性,彻底改变了 Java 的并发编程模型:
// 平台线程(传统):1:1 映射到 OS 线程,创建成本高
// 虚拟线程:由 JVM 管理,创建成本极低,可以轻松创建百万级
Thread.ofVirtual().start(() -> {
System.out.println("Running in virtual thread");
});
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
IntStream.range(0, 10000).forEach(i -> {
executor.submit(() -> {
Thread.sleep(Duration.ofSeconds(1));
return i;
});
});
} // 10000 个虚拟线程轻松处理虚拟线程 vs 响应式编程:虚拟线程让你用同步代码写出异步性能——不再需要 WebFlux、RxJava 的复杂链式调用。
Java 22~最新:持续进化
模式匹配增强:switch 支持类型模式和解构。字符串模板:更优雅的字符串拼接方式。Vector API:SIMD 指令加速数值计算。Foreign Function API:安全地调用 C/C++ 原生代码。
总结
Java 的现代化演进可以用三个关键词概括:简洁——Record、var、Switch 表达式消灭样板代码;并发——虚拟线程将 Java 的并发能力提升到新高度;安全——密封类、模块化、模式匹配让类型系统更强大。对于一个现代 Java 开发者来说,Java 17 LTS 是底线,Java 21 LTS 是标配,而持续跟随新版本是保持竞争力的关键。
评论 (0)