Java中的try-with-resource语句
请看以下功能:
import java.io.*;public class Try {
public static void main(String args[]) {
Try ob = new Try();
ob.func();
}
void func() {
BufferedReader br = new BufferedReader(new FileReader("C:\\example.txt"));
try {
System.out.println(br.readLine());
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
在这种情况下,我们利用BufferedReader类的资源。如果方法br.readLine()引发异常(或者即使它没有引发异常),则BufferedReader类的资源将保持打开状态。在Java中,当不再需要所有资源时,关闭它们非常重要。一种实现方法是利用final块,在这里我们关闭了必要的资源。
import java.io.*;public class Try {
public static void main(String args[]) {
Try ob = new Try();
ob.func();
}
void func() {
BufferedReader br = new BufferedReader(new FileReader("C:\\example.txt"));
try {
System.out.println(br.readLine());
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
if (br != null) br.close();
}
}
}
如果我们在try块中建立了与许多资源的连接,则需要在finally块中逐一关闭所有资源。Java 7和所有更高版本支持的另一种方法是使用try-with-resource块。
try-with-resource块的一般语法为:
try ( //在此处打开资源){
//在此处使用资源
}
catch( //在此处捕获异常)
{
//在这里处理异常
}
//资源自动关闭
在try-with-resource块中,所有资源都会自动关闭。我们可以捕获并最终将块与try-with-resource块一起使用。关闭资源后,将运行任何catch或finally块。我们可以在try-with-resource语句中打开多个资源,所有这些资源都必须实现Java.lang.AutoCloseable接口。资源以创建时的相反顺序关闭。
考虑对我们的代码进行以下更新:
import java.io.*;public class Try {
public static void main(String args[]) {
Try ob = new Try();
ob.func();
}
void func() {
try (BufferedReader br = new BufferedReader(new FileReader("C:\\example.txt"))) {
System.out.println(br.readLine());
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
输出结果
C:\example.txt (No such file or directory)
无论try块是正常执行还是突然执行,BufferedReader资源都会自动关闭。
在试穿与资源有以下几个优点:
它使代码更易于阅读和解释
资源自动管理
我们不需要做一个finally块,尤其是关闭资源
可以在try-with-resource语句中打开多个资源,以分号分隔
资源以相反的顺序关闭,以避免任何依赖性问题
import java.io.*;public class Try {
public static void main(String args[]) {
Try ob = new Try();
ob.func();
}
void func() {
try (FileInputStream fin = new FileInputStream("file.txt"); BufferedReader br = new BufferedReader(new FileReader("C:\\example.txt"))) {
System.out.println(br.readLine());
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
输出结果
file.txt (No such file or directory)
注意:这些程序中的输出引发异常,因为它们引用的是该路径中不存在的文件。
以上是 Java中的try-with-resource语句 的全部内容, 来源链接: utcz.com/z/354920.html