请你详细说一下怎么通过使用 try-finally 或 try-with-resources 块来确保资源被正确关闭
时间: 2023-08-03 18:05:44 浏览: 126
Java使用 try-with-resources 实现自动关闭资源的方法
在编写Java程序时,我们经常需要使用一些资源,如文件、数据库连接、网络连接等。当我们使用完这些资源后,需要将其关闭以避免资源泄漏和程序异常。为了确保资源被正确关闭,Java提供了两种方式:try-finally和try-with-resources。
使用try-finally块:
在使用资源时,我们可以在try块中打开资源,然后在finally块中关闭资源。这样,无论try块中的代码是否抛出异常,finally块中的代码都会执行,从而确保资源被正确关闭。例如,下面的代码使用try-finally块来关闭文件:
```
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream("file.txt");
// 使用inputStream进行读取文件操作
} catch (IOException e) {
// 异常处理
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
// 异常处理
}
}
}
```
使用try-with-resources块:
在Java 7中,引入了try-with-resources语句,可以自动关闭资源。在try块中打开资源,并在try-with-resources语句的括号中声明,当try块结束时,自动关闭资源。例如,下面的代码使用try-with-resources块来关闭文件:
```
try (FileInputStream inputStream = new FileInputStream("file.txt")) {
// 使用inputStream进行读取文件操作
} catch (IOException e) {
// 异常处理
}
```
在上面的代码中,我们在try-with-resources语句的括号中声明了FileInputStream,这样当try块结束时,Java会自动关闭FileInputStream。如果我们需要使用多个资源,则可以在try-with-resources语句的括号中声明多个资源,用分号隔开。例如:
```
try (FileInputStream inputStream = new FileInputStream("file.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream)) {
// 使用bufferedInputStream进行读取文件操作
} catch (IOException e) {
// 异常处理
}
```
在上面的代码中,我们声明了两个资源:FileInputStream和BufferedInputStream,这两个资源都会在try块结束时自动关闭。
阅读全文