简介
我们在编写调用资源的代码时,诸如JDBC、文件读写流等,按照要求必须关闭对应的流对象,样板代码如下:
try{
XXXXXXXX
}catch(Execption e){
}finally{
}
后来觉得这个try-catch-finally代码太繁琐,再加上Ruby、Python等语言都进行了优化,因此,到了JDK1.7之后,也出现优化,那就是: try-with-resources
使用
新结构扩展了try块,在try块中声明打开的任何资源都会关闭,因此,不必配对使用try块与对应的finally块,try块内使用分号分隔各个资源;
例如:
|
try ( FileInputStream in1 = new FileInputStream(“aa.txt”); FileInputStream in2 = new FileInputStream(“bb.txt”) ) { // 操作in1和in2进行逻辑处理 } |
前提
为什么try-with-resources会关闭资源呢?
那是因为只有那些实现了java.lang.AutoCloseable接口的对象、实现了java.io.Closeable接口的对象才能使用try-with-resources语法;
这2个接口实现类中都要求实现close方法,这才实现了资源的自动关闭;
异常屏蔽
|
public class AutoClose { |
看一下代码,在调用dealWith方法时,会抛出2个异常:一个是work方法抛出的异常,一个是close方法抛出的异常;
但在main方法中只接收到了close方法抛出的异常,而work方法抛出的异常被屏蔽了,而在实际开发中,可能work异常信息比close异常信息更重要;
为了解决这个问题,JDK1.7解决了这个问题,为了支持try-with-resources语句,也为了修复异常屏蔽问题;

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



