IDEA快捷键与代码补全汇总
2026/10/28 18:54:14
从 JDK 8(2014年3月发布)到 JDK 21(2023年9月发布)的9年时间里,Java经历了巨大的变革。以下是主要的新特性对比:
模块化JDK和应用程序,解决JAR地狱问题
module-info.java文件定义模块依赖
java // JDK 8 List<String> list = new ArrayList<>(); // JDK 10+ var list = new ArrayList<String>(); var stream = list.stream();java // JDK 8 String html = "<html>\n" + " <body>\n" + " <p>Hello</p>\n" + " </body>\n" + "</html>\n"; // JDK 15+ String html = """ <html> <body> <p>Hello</p> </body> </html> """;java // JDK 8 - 需要大量样板代码 public class Person { private final String name; private final int age; // 构造器、getter、equals、hashCode、toString... } // JDK 16+ public record Person(String name, int age) { }instanceof模式匹配- JDK 16正式
java // JDK 8 if (obj instanceof String) { String s = (String) obj; System.out.println(s.length()); } // JDK 16+ if (obj instanceof String s) { System.out.println(s.length()); }switch表达式和模式匹配- JDK 21正式
java // JDK 21 String formatted = switch (obj) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> obj.toString(); };java // 限制哪些类可以继承 public sealed interface Shape permits Circle, Rectangle, Triangle { } public final class Circle implements Shape { } public final class Rectangle implements Shape { }java // 创建百万级轻量级线程 try (var executor = Executors.newVirtualThreadPerTaskExecutor()) { IntStream.range(0, 100_000).forEach(i -> { executor.submit(() -> { Thread.sleep(Duration.ofSeconds(1)); return i; }); }); }java // JDK 8 - 繁琐 List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list = Collections.unmodifiableList(list); // JDK 9+ List<String> list = List.of("A", "B", "C"); Set<String> set = Set.of("A", "B"); Map<String, Integer> map = Map.of("A", 1, "B", 2);takeWhile/dropWhile- JDK 9
ofNullable- JDK 9
iterate增强- JDK 9
java // JDK 9+ optional.ifPresentOrElse( value -> System.out.println(value), () -> System.out.println("空值") );java // 取代HttpURLConnection HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com")) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());java // JDK 8引入,后续版本有增强 LocalDate date = LocalDate.now(); Instant instant = Instant.now();G1GC- JDK 9成为默认(替代Parallel GC)
ZGC- JDK 15生产就绪(低延迟)
Shenandoah- JDK 12生产就绪(低暂停时间)
减少启动时间,降低内存占用
性能诊断工具,现在免费使用
JAXB、JAX-WS、JAF等移到Jakarta EE
需要单独添加依赖
Java REPL交互式环境
打包自包含的Java应用程序
| 版本 | 年份 | 关键特性 |
|---|---|---|
| JDK 8 | 2014 | Lambda、Stream API、新日期时间API |
| JDK 9 | 2017 | 模块系统、JShell、集合工厂方法 |
| JDK 11 | 2018 | LTS,局部变量类型推断,HTTP Client |
| JDK 17 | 2021 | LTS,密封类、模式匹配增强 |
| JDK 21 | 2023 | LTS,虚拟线程、结构化并发、分代ZGC |
包结构调整:Java EE相关包已移除
默认GC改变:从Parallel GC变为G1GC
模块化:大型应用需要考虑模块化
API变化:许多API已被标记为废弃
虚拟线程- 大幅提升并发性能
记录类- 减少样板代码
模式匹配- 更简洁的条件处理
文本块- 更好的字符串处理
ZGC- 极低延迟垃圾回收
新项目:直接从JDK 21 LTS开始
生产系统:至少升级到JDK 17 LTS
遗留系统:考虑逐步迁移到JDK 11 LTS作为中间步骤
JDK 21代表了Java平台的重大飞跃,特别在并发编程方面带来了革命性的改进,是现代Java开发的推荐起点。