推荐链接:
总结——》【Java】
总结——》【Mysql】
总结——》【Redis】
总结——》【Kafka】
总结——》【Spring】
总结——》【SpringBoot】
总结——》【MyBatis、MyBatis-Plus】
总结——》【Linux】
总结——》【MongoDB】
总结——》【Elasticsearch】
Java——》try-with-resource
- 1.概念
- 2.特点
- 3.示例
- 3.1关闭单个资源
- 3.2关闭多个资源
1.概念
try-with-resources 是 JDK 7 中一个新的异常处理机制
,它能够很容易地关闭在 try-catch 语句块中使用的资源
。
try-with-resources 语句确保了每个资源在语句结束时关闭
。
所谓的资源(resource)是指在程序完成后必须关闭的对象。所有实现了 java.lang.AutoCloseable
接口(包括实现了 java.io.Closeable
的所有对象),可以使用作为资源。
2.特点
- 所有实现AutoCloseable接口的类,在try()里声明该类实例的时候,在try()结束后,close()都会被自动调用,这个动作会早于finally里调用的方法。
- 不管是否出现异常(int i=1/0会抛出异常),try()里的实例都会被调用close()。
- 越晚声明的对象,会越早被close掉。
3.示例
3.1关闭单个资源
public class Test {public static void main(String[] args) {// JDK1.7、1.8写法:需要在try中声明一个新变量try (Resource res = new Resource()) {res.doSome();} catch (Exception ex) {ex.printStackTrace();}// JDK1.9写法:如果已经有一个资源是 final 或等效于 final 变量,可以在 try-with-resources 语句中直接使用该变量,而无需在 try-with-resources 语句中声明一个新变量// A final resourcefinal Resource resource1 = new Resource("resource1");// An effectively final resourceResource resource2 = new Resource("resource2");try (resource1;resource2) {// 直接使用 resource1 and resource 2.}}
}class Resource implements AutoCloseable {void doSome() {System.out.println("do something");}@Overridepublic void close() throws Exception {System.out.println("resource is closed");}
}
3.2关闭多个资源
public class Test {public static void main(String[] args) {try(ResourceSome some = new ResourceSome();ResourceOther other = new ResourceOther()) {some.doSome();other.doOther();} catch(Exception ex) {ex.printStackTrace();}}
}class ResourceSome implements AutoCloseable {void doSome() {System.out.println("do something");}@Overridepublic void close() throws Exception {System.out.println("some resource is closed");}
}class ResourceOther implements AutoCloseable {void doOther() {System.out.println("do other things");}@Overridepublic void close() throws Exception {System.out.println("other resource is closed");}
}