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
执行完后自动关闭,确实方便了很多。
正文到此结束