in resource java JDK8 try-with-resources ~ read.

try-with-resources

本文基于JDK 1.8.0_45


在JDK7中提供了一个新的特性:try-with-resources,该特性大大的降低了资源操作时的资源关闭相关的代码,原来的写法如下所示:

        InputStream stream = new FileInputStream("file.txt");
        try {
            // do something
        } finally {
            stream.close();
        }

当资源实现了AutoCloseable接口时,新写法如下所示:

        try (InputStream stream = new FileInputStream("file.txt")) {
            // do something
        }

在代码块执行完毕之后会自动调用resource的close方法关闭资源,再也不需要因为忘记关闭资源而导致资源泄露之类的问题了。

在实现该接口时有以下几点最佳实践:

  1. 建议在实现的时候抛出具体的异常,如果肯定没有异常发生则不要抛出异常;
  2. 如果关闭失败建议放弃继续尝试关闭底层的资源,而只是将其标志为关闭并抛出异常;
  3. 建议不要抛出InterruptedException异常以避免潜在的问题;
  4. 建议实现为幂等的,以避免多次调用出现问题;
分享按钮