Java try with resources语句的2种用法(附带实例)
Java 7 提供了一个新的异常处理机制,叫做 try with resources 语句,它能够很容易地关闭在 try-catch 语句中使用的资源。这些资源指的是在程序运行结束后,必须关闭的对象。
也就是说,try with resources 语句确保了每个资源在程序运行结束后都会被关闭。下面将从两个方面演示 try with resources 语句的使用方法。
例如,定义一个实现 AutoCloseable 接口的 Resource 类。在 Resource 类中,包含一个用于执行任务的 doTask() 方法和重写的 close() 方法。定义一个用于测试的 Test 类,使用 try with resources 语句实现自动关闭资源的功能。代码如下:
定义一个用于测试的 Test 类,对 ResourceOne 类和 ResourceTwo 类使用 try with resources 语句实现自动关闭资源的功能。代码如下:
也就是说,try with resources 语句确保了每个资源在程序运行结束后都会被关闭。下面将从两个方面演示 try with resources 语句的使用方法。
Java 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(); } } }运行结果如下:
执行任务
关闭资源
Java try with resources关闭多个资源
例如,定义实现 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("关闭资源 2"); } } 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