模块课程(2/2)
尝试资源
在旧版本的 Java 中,管理需要显式关闭的资源(例如文件、数据库连接或网络流)需要强制的 finally 块来确保它们已关闭。这导致了冗长且容易泄漏的代码。
Java 7 引入了 try-with-resources 语句,该语句保证自动关闭在 try 块中声明的所有资源,前提是它们实现了 AutoCloseable 接口。
语法
资源在 try 关键字之后的括号内声明和初始化。
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
String line = br.readLine();
System.out.println(line);
} catch (IOException e) {
System.out.println("I/O Error: " + e.getMessage());
}
// br is closed automatically here, even if an exception occurs声明多个资源
您可以在同一个 try 块内实例化多个资源,并用分号 ; 分隔它们。资源将按照其声明的相反顺序关闭。
try (
FileReader fr = new FileReader("input.txt");
FileWriter fw = new FileWriter("output.txt")
) {
// Use resources
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
}创建自定义资源
只要自定义资源实现 java.lang.AutoCloseable 并覆盖 close() 方法,就可以在 try-with-resources 块中使用。
public class DatabaseConnection implements AutoCloseable {
public void query(String sql) {
System.out.println("Running query: " + sql);
}
@Override
public void close() {
System.out.println("Connection closed!");
}
}自己尝试一下
使用 try-with-resources 语句完成 readFile 方法,以初始化包装路径上 FileReader 的 BufferedReader。在 catch 块中,拦截 IOException 并打印“读取文件时出错”。
显示提示
在“try”之后的括号中声明“BufferedReader”,并实现“IOException”处理。
3 次尝试后可用的解决方案
在 try-with-resources 块内实例化自定义资源 CustomResource,对其调用 doWork() 方法,并通过打印“Error”来处理异常。
显示提示
使用 try (CustomResource res = new CustomResource()) 并在其中调用 res.doWork(); 。
3 次尝试后可用的解决方案
在同一个 try-with-resources 构造中声明 FirstResource 和 SecondResource。通过打印“Error”来处理异常。
显示提示
使用分号“;”分隔“try”括号内的两个资源的声明。
3 次尝试后可用的解决方案