JDK 7,也称为 "Dolphin"(海豚),是 Java 语言发展史上的一个重要里程碑,它在 2011 年 7 月 发布,引入了许多新特性,极大地提升了 Java 语言的现代化程度和开发效率。

JDK 7 的重要新特性(中文详解)
以下是 JDK 7 中最核心和最常用的几个新特性,并附有中文解释和示例代码。
Switch 语句支持 String 类型
在 JDK 7 之前,switch 语句只能支持 byte, short, char, int 以及其对应的包装类型,JDK 7 引入了对 String 类型的直接支持,使得代码更加简洁和易读。
示例代码:
public class StringSwitch {
public static void main(String[] args) {
String day = "Monday";
int dayNumber;
switch (day) {
case "Monday":
dayNumber = 1;
break;
case "Tuesday":
dayNumber = 2;
break;
// ... 其他情况
default:
dayNumber = -1;
break;
}
System.out.println("Day number is: " + dayNumber); // 输出: Day number is: 1
}
}
Try-with-Resources 语句(自动资源管理)
这是 JDK 7 中最受赞誉的特性之一,它实现了 AutoCloseable 接口的资源(如 FileInputStream, BufferedReader 等)可以在 try 语句块执行完毕后自动关闭,无需再编写 finally 块来手动关闭,这大大简化了代码,并避免了因忘记关闭资源而导致的资源泄漏。

示例代码(JDK 7 之前):
// 旧方式
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("file.txt"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 必须手动关闭
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
示例代码(JDK 7 新方式):
// 新方式:自动资源管理
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
// try 块结束后,br 会自动被关闭,无需 finally
} catch (IOException e) {
e.printStackTrace();
}
如果需要管理多个资源,可以用分号隔开:
try (FileInputStream fis = new FileInputStream("input.txt");
FileOutputStream fos = new FileOutputStream("output.txt")) {
// ... 操作流
} catch (IOException e) {
// ...
}
二进制字面量
为了更直观地表示二进制数,JDK 7 引入了二进制字面量,使用 0b 或 0B 作为前缀。

示例代码:
public class BinaryLiteral {
public static void main(String[] args) {
int binary = 0b1010; // 等于十进制的 10
int anotherBinary = 0B1101; // 等于十进制的 13
System.out.println("0b1010 = " + binary);
System.out.println("0B1101 = " + anotherBinary);
}
}
数字字面量下划线
为了提高长数字的可读性,JDK 7 允许在数字字面量中使用下划线 _ 作为分隔符,编译器在编译时会自动忽略这些下划线。
示例代码:
public class UnderscoreInNumericLiterals {
public static void main(String[] args) {
long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumber = 999_99_9999L;
double pi = 3.14_15_92_65_35;
System.out.println("Credit Card Number: " + creditCardNumber);
System.out.println("Social Security Number: " + socialSecurityNumber);
System.out.println("Pi: " + pi);
}
}
泛型实例化的“菱形”语法(Diamond Syntax)
在 JDK 7 之前,创建泛型实例时,右侧的类型必须重复写一遍,即使它和左侧完全相同,JDK 7 引入了“菱形”语法 <>,让编译器自动推断类型,使代码更简洁。
示例代码(JDK 7 之前):
// 旧方式 List<String> list = new ArrayList<String>(); Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();
示例代码(JDK 7 新方式):
// 新方式:菱形语法 List<String> list = new ArrayList<>(); Map<String, List<Integer>> map = new HashMap<>();
多异常捕获(Multi-Catch)
在 JDK 7 之前,如果多个异常类型需要执行相同的处理逻辑,必须为它们分别编写 catch 块,JDK 7 允许在单个 catch 块中使用 符号来组合多个异常类型。
示例代码(JDK 7 之前):
// 旧方式
try {
// 可能抛出 IOException 或 SQLException 的代码
} catch (IOException e) {
log(e);
} catch (SQLException e) {
log(e);
}
示例代码(JDK 7 新方式):
// 新方式:多异常捕获
try {
// ...
} catch (IOException | SQLException e) {
// e 是 final 的,不能被重新赋值
log(e);
}
JDK 7 的生命周期与现状
生命周期:
- 发布日期: 2011年7月28日
- 主流支持结束: 2025年4月
- 扩展支持结束: 2025年7月
现状: JDK 7 已经完全停止了所有支持,包括安全更新和错误修复,这意味着:
- 严重的安全风险: 继续使用 JDK 7 会使您的应用程序暴露在已知和未知的安全漏洞之下,极易受到攻击。
- 无法获得官方支持: 如果您遇到 Bug,无法再从 Oracle 或社区获得官方的帮助。
- 不兼容新软件和库: 现代绝大多数 Java 库、框架(如 Spring Boot 2.x+)和工具都要求 JDK 8 或更高版本,使用 JDK 7 将无法使用这些现代化的技术。
强烈建议: 请立即停止在生产环境中使用 JDK 7,并升级到更新的、仍在维护的 JDK 版本(如 JDK 8, JDK 11, JDK 17 LTS 等)。
如何下载 JDK 7
尽管不推荐在生产环境使用,但您可能因为学习历史代码或特定项目需求而需要 JDK 7,Oracle 已将旧版本的 JDK 移至其“Oracle Java 存档”页面。
官方下载地址:
- Oracle Java SE Development Kit 7 Downloads: https://www.oracle.com/java/technologies/javase/javase7-archive-downloads.html
注意事项:
- 您需要拥有一个免费的 Oracle 账户才能下载。
- 请仔细阅读该页面的许可协议。
| 特性 | 中文描述 | 示例 |
|---|---|---|
| String in switch | switch 语句支持 String 类型 |
switch (day) { case "Monday": ... } |
| Try-with-resources | 自动关闭实现了 AutoCloseable 的资源 |
try (Resource r = ...) { ... } |
| Binary Literals | 支持二进制字面量 | int num = 0b1010; |
| Underscores in Literals | 数字字面量可使用下划线分隔 | long num = 1_000_000L; |
| Diamond Syntax | 泛型实例化时自动推断类型 | List<String> list = new ArrayList<>(); |
| Multi-Catch | 单个 catch 块可捕获多种异常 |
catch (IOException | SQLException e) |
JDK 7 是一个承前启后的版本,它为现代 Java 的发展奠定了基础,虽然其生命周期已经结束,但了解它的特性对于理解 Java 的演进历史仍然非常有价值,最重要的是,请务必将您的开发环境升级到受支持的版本,以确保应用的安全和稳定。
