基本語法
try(…) {} ,try裏面所有實現接口java.lang.AutoCloseable,包括java.io.Closeable的對象,在{}的語句塊執行完畢後都會自動的close。
例如:
try (FileWriter fileWriter = new FileWriter(outFile);
PrintWriter printWriter = new PrintWriter(fileWriter)) {
for (int i = 0; i < template.length; i++) {
printWriter.println(template[i]);
}
} catch (IOException e) {
LOGGER.error("寫出小說文件失敗,文件路徑:{}", filePath);
}
- fileWriter和printWriter都會在try的{}裏面語句執行完後自動執行clone();
- try結束後自動調用的close方法,這個動作會早於finally裏調用的方法。
- 不管是否出現異常,try()裏的實例都會被調用close方法
- 越晚聲明的對象,會越早被close掉。
guava給我們提供了方法。我們可以把Closeable 的對象註冊到Closer對象上,資源使用完畢後,調用closer的close方法,就可以把所有註冊了的資源安全的close掉。這個方法雖然沒有try-with-resources好用,但是比起傳統的jdk做法,要好很多了。
Closer closer = Closer.create();
try {
InputStream in = closer.register(openInputStream());
OutputStream out = closer.register(openOutputStream());
// do stuff with in and out
} catch (Throwable e) { // must catch Throwable
throw closer.rethrow(e);
} finally {
closer.close();
}