try with resources

参考文章:https://juejin.im/entry/57f73e81bf22ec00647dacd0

在以前的写法中:涉及到资源的释放时用finally代码块,这样写存在的问题:

一、如果try和finally中同时抛出异常,那么try中的异常会被finally吃掉(执行顺序的结果),try with resoutces中也是只会抛出一个异常,但可以显示两个异常,调用了异常类的addSuppressed()这个方法实现

二、一般的close()方法又要捕获异常,会造成大量try  catch

使用try with resources后

不用我们显示close(),编译器会跟我们自动生成close方法,并且如果try  和 finally中都抛出异常,只会显示一个异常,但是这个异常中会显示两个异常,这是通过

 使用 try with resource有一个要求:对应的类实现AutoColseable,重写close()方法

使用时存在的问题:某些类实现了AutoColseable,但是close()方法中除了调用底层资源的close()方法还会进行其他的处理,当其他的处理出现异常时close()方法就得不到释放,

解决办法:在try中也声明底层资源,最后会自动调用对应的close()

这个问题是两种情况都存在的问题

jdk1.9后对在try中声明的变量做了改进:

https://waylau.com/concise-try-with-resources-jdk9/

原文地址:https://www.cnblogs.com/zhaolei1996/p/12636433.html