传统方式使用finally块来关闭物理资源,保证关闭操做老是会被执行。html
其中有多个字段的还比较麻烦一点,关闭的时候为每个物理资源使用单独的try...catch块来关闭资源,保证关闭资源时引起的异常不会影响其余资源的关闭。java
为了解决以上传统方式的问题, Java7新增了自动关闭资源的try语句。它容许在try关键字后紧跟一对圆括号,里面能够声明、初始化一个或多个资源,此处的资源指的是那些必须在程序结束时显示关闭的资源(数据库链接、网络链接等),try语句会在该语句结束时自动关闭这些资源。数据库
为了保证try语句能够正常关闭资源,这些资源实现类必须实现Closeable或AutoCloseable接口,实现这些类就必须实现close方法。微信
最後,try-with-resources 语句能够像Java SE 7 以前的普通try语句同样带有catch块和finally块,但在执行catch块(如有必要)和finally块中的代码前,会先关闭 try-with-resources 语句中声明的资源。网络
在传统的例子中,若是 ps.println()与close()方法先後都产生了异常,那么在用finally块关闭PrintStream对象时,由 ps.println()方法产生的(第一个)异常会被抑制(suppressed),只有close()产生的(第二个)异常会被向上传递;相反,若用 try-with-resources 语句的话,则只有 try 块中产生的异常被向上传递(这个异常的信息一般更有用),try-with-resources 语句中产生的异常则会被抑制。固然,在Java SE 7之後,被抑制的异常能够经过调用Throwable.getSuppressed()方法获取。oracle
参考文档:htm
The try-with-resources Statement (The Java™ Tutorials > Essential Classes > Exceptions)对象
https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html接口
有什么交流的,能够加我微信公众号留言:资源