在 Java 7 之前,程序中如果有需要关闭的资源,例如 java.io.InputStream
、java.sql.Connection
等,通常会在 finally 中关闭,例如:
InputStream inputStream = null;
try {
inputStream = new FileInputStream("/my/file");
// ...
} catch (Exception e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在 Java 7 以及后续版本中,支持 try-with-resources,任何实现 java.lang.AutoCloseable
接口的类,包括 java.io.Closeable
的实现类,都可以通过 try-with-resources 来关闭。
上面代码通过 try-with-resources 可以简化为:
try (InputStream inputStream = new FileInputStream("/my/file")) {
// ...
} catch (Exception e) {
e.printStackTrace();
}
支持定义多个 resources
通