原创

Java try-with-resources语句


今天看代码时,发现了一种没见过的try()...catch()使用方法:

try (InputStream uploadIs = StreamUtil.clone(is);
     FileOutputStream fos = new FileOutputStream(realFilePath)) {
     ......
} catch (Exception e) {
     throw new LocalApiException("文件上传失败:" + e.getMessage() + imageUrl);
}

和平时使用相比try后面多了一个括号,在括号中创建了流对象,却也没有在finally中关闭;于是搜索了一下,原来是JDK7优化后的try-with-resource语句:

从JDK1.7开始,Java的编译器和运行环境支持新的 try-with-resources 语句,称为 ARM 块(Automatic Resource Management) ,自动资源管理。带有resources的try语句声明一个或多个resources。resources是在程序结束后必须关闭的对象。try-with-resources语句确保在语句末尾关闭每个resources。任何实现java.lang.AutoCloseable,包括实现了java.io.Closeable的类,都可以作为resources使用。

格式示例:

try (创建流对象语句,如果多个,使用';'隔开) { 
    // 读写数据...
} catch (IOException e) {
    e.printStackTrace();
}

需要注意的是这些可关闭的资源必须实现 java.lang.AutoCloseable 接口(AutoCloseable接口中只有一个抽象方法close,我们自己也可以定义类实现close方法来使用),这样的话写在()内的流对象都会在try执行完后自动关闭,确实方便了很多。

正文到此结束