try…with…resources语句
Java 7 提供了一个新的异常处理机制:try…with…resources 语句。它能够很容易地关闭在 try-catch 语句中使用的资源。这些资源指的是在程序运行结束后,必须关闭的对象。也就是说,try-with-resources 语句确保了每个资源在程序运行结束后都会被关闭。下面将从两个方面演示 try-with-resources 语句的使用方法。
关闭一个资源
如果一个资源对象是在 try…with…resources 语句中声明的,那么 AutoCloseable 接口中的 close() 方法就会自动执行。也就是说,JVM 会自动调用 close() 方法关闭资源。
例如,定义一个实现 AutoCloseable 接口的 Resource 类。在 Resource 类中,包含一个用于执行任务的 doTask() 方法和重写的 close() 方法。定义一个用于测试的 Test 类,使用 try…with…resources 语句实现自动关闭资源的功能。代码如下:
class Resource implements AutoCloseable {
void doTask() {
System.out.println("执行任务");
}
@Override
public void close() throws Exception {
System.out.println("关闭资源");
}
}
public class Test {
public static void main(String[] args) {
try (Resource r = new Resource()) {
r.doTask();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果如下:
执行任务
关闭资源
关闭多个资源
例如,定义实现 AutoCloseable 接口的 ResourceOne 类和 ResourceTwo 类。在 ResourceOne 类中,包含一个用于执行任务1的 doTaskOne() 方法和重写的 close() 方法;在 ResourceTwo 类中,包含一个用于执行任务2的 doTaskTwo() 方法和重写的 close() 方法。定义一个用于测试的 Test 类,对 ResourceOne 类和 ResourceTwo 类使用 try…with…resources 语句实现自动关闭资源的功能。代码如下:
class ResourceOne implements AutoCloseable {
void doTaskOne() {
System.out.println("执行任务1");
}
@Override
public void close() throws Exception {
System.out.println("关闭资源1");
}
}
class ResourceTwo implements AutoCloseable {
void doTaskTwo() {
System.out.println("执行任务2");
}
@Override
public void close() throws Exception {
System.out.println("关闭资源1");
}
}
public class Test {
public static void main(String[] args) {
try (ResourceOne ro = new ResourceOne();
ResourceTwo rt = new ResourceTwo()) {
ro.doTaskOne();
rt.doTaskTwo();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果如下:
执行任务1
执行任务2
关闭资源2
关闭资源1