在 Java 中,try() 语法是 try-with-resources 语句的一部分,它是 Java 7 引入的特性,用于简化资源管理(如文件、网络连接、数据库连接等需要显式关闭的资源)。try() 的括号中声明并初始化需要自动关闭的资源,这些资源必须实现 AutoCloseable 或 Closeable 接口。
语法结构
try (资源声明) {
// 使用资源的代码
} catch (异常类型 e) {
// 异常处理
}
核心作用
-
自动关闭资源
在try()括号中声明的资源,无论代码块是否抛出异常,都会在代码块执行结束后自动调用其close()方法关闭资源,无需手动在finally中关闭。 -
简化代码
替代传统的try-catch-finally手动关闭资源模式,减少冗余代码和潜在的内存泄漏风险。
示例对比
传统方式(Java 7 之前)
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader("file.txt"));
String line = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close(); // 需要手动关闭资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用 try-with-resources(Java 7+)
try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {
String line = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
// 无需 finally,资源自动关闭!
关键规则
-
资源声明
- 在
try()括号中可以声明多个资源,用分号;分隔。 - 资源的作用域仅限于
try代码块内部。
try ( InputStream is = new FileInputStream("input.txt"); OutputStream os = new FileOutputStream("output.txt") ) { // 使用 is 和 os } - 在
-
自动关闭顺序
资源按照声明的逆序关闭(后声明的先关闭)。 -
异常处理
- 如果
try代码块和资源关闭(close())都抛出异常,优先抛出try代码块的异常,关闭时的异常会被抑制(可通过Throwable.getSuppressed()获取)。 - 支持
catch和finally块(但通常不需要finally)。
- 如果
常见应用场景
- 文件操作:
FileInputStream、BufferedReader等。 - 数据库连接:
Connection、Statement、ResultSet等。 - 网络资源:
Socket、HttpURLConnection等。
注意事项
- 只有实现了
AutoCloseable接口的类才能放在try()括号中。 - 如果资源未正确关闭,编译器会直接报错。
总结
try() 的括号用于声明需要自动管理的资源,结合 try-with-resources 语法,可以更安全、简洁地处理资源释放,避免因忘记关闭资源导致的内存泄漏或文件句柄耗尽等问题。
5987

被折叠的 条评论
为什么被折叠?



