“七年磨一剑,小修小补,却让代码更简洁、更安全、更高效。”
继JDK6专注平台成熟之后,JDK 7(Java SE 7,代号 Dolphin) 于 2011 年 7 月正式发布,增加了语言级语法增强。虽然整体改动克制(原计划的“大特性”如 Lambda、模块化被推迟),但通过 Project Coin 引入的一系列“小改进”,来提升开发体验。
这些变化看似微小,却深刻影响了我们日常编码习惯:try-with-resources 让资源管理不再遗漏,switch 支持字符串简化了配置路由,钻石操作符减少了泛型冗余……它们共同构成了现代 Java 代码的基础语法。
JDK 7 的所有增强均由 JSR 336: “The Umbrella JSR for Java SE 7” 整合标准化。它本身不定义新功能,而是将多个组件 JSR 与内部改进打包为完整的 Java SE 7 平台规范。
根据 JSR 336 官方提案[1],JDK 7 围绕四大主题展开:Productivity(生产力)、Performance(性能)、Universality(普适性)、Integration(集成)。
以下是 JDK 7 引入的核心特性:
来自 JSR 334: Small Enhancements to the Java Programming Language(Project Coin)
• try-with-resources 语句
AutoCloseable 的资源(如 InputStream, Connection)。try (FileInputStream fis = new FileInputStream("file.txt");
BufferedInputStream bis = new BufferedInputStream(fis)) {
// 使用资源
} // 自动调用 close()finally { close() } 块。• Diamond Operator(钻石操作符)
// JDK 6
Map<String, List<String>> map = new HashMap<String, List<String>>();
// JDK 7+
Map<String, List<String>> map = new HashMap<>();• Switch 支持 String
switch 中使用字符串常量。String command = "start";
switch (command) {
case "start": start(); break;
case "stop": stop(); break;
}hashCode() + equals(),性能略低于整数 switch。• 多异常捕获(Multi-catch)与更精确的 rethrow
try {
// ...
} catch (IOException | SQLException e) { // 多异常捕获
logger.error(e);
throw e; // 编译器知道 e 只能是 IOException 或 SQLException
}• 二进制字面量与数字下划线
int binary = 0b1010_1010; // 二进制
long creditCard = 1234_5678_9012_3456L; // 下划线分隔💡 开发者提示:Project Coin 的哲学是“小而实用”——不改变语言范式,但让每天写的代码更清爽。
来自 JSR 203: More New I/O APIs for the Java Platform (“NIO.2”)
• java.nio.file 包(Path, Files, Paths)
java.io.File。Path:表示文件路径(跨平台)Files:提供静态工具方法(copy, move, readAllLines, walk)WatchService:监听文件系统事件(创建/修改/删除)Path path = Paths.get("data.txt");
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);• 异步 I/O(AIO)
AsynchronousFileChannel, AsynchronousSocketChannel⚠️ 注意:虽然 AIO 设计先进,但因复杂性和 Linux epoll 模型限制,实际生产中仍以 NIO(非阻塞)为主流。
来自 JSR 292: Supporting Dynamically Typed Languages on the Java Platform
invokedynamic 字节码指令ForkJoinPool, RecursiveTask, RecursiveActionRandom 的 CAS 竞争)。try-with-resources 支持(Connection, Statement, ResultSet 实现 AutoCloseable)。JLayer(装饰组件)。Oracle 的 JDK 7 平台通过 JSR 336 明确将以下能力纳入 Java SE 标准:
Path / Files / WatchServiceinvokedynamic 指令这五大特性让 JDK 7 成为 承上启下 的关键版本:它修复了旧 API 的痛点,为 Lambda 和 Stream 铺平道路,并首次让 JVM 真正拥抱动态语言生态。
[1] JSR 336 官方提案: https://www.jcp.org/en/jsr/detail?id=336