![](/img/trans.png)
[英]Close multiple resources with AutoCloseable (try-with-resources)
[英]Java 7 Try-With-Resources (AutoCloseable) Implementation
我的問題更多的是為什么類型而不是如何 。
我知道在Java 7中有以下工作:
try (
FileInputStream in = new FileInputStream(source);
FileOutputStream out = new FileOutputStream(target);
) {
.....................
} catch (......) {
...............
}
以下是語法錯誤:
FileInputStream in;
FileOutputStream out;
try (
in = new FileInputStream(source);
out = new FileOutputStream(target);
) {
.....................
} catch (......) {
...............
}
我很好奇,為什么它如此重要, Closable
/ Autoclosable
引用是本地的try
塊? 如果我們不擁有它而不是關閉它是危險的,這只是邏輯嗎?
我沒有這個語言設計決策的參考,但我認為問題是允許非局部變量自動閉合將是危險的 - 也就是說,它將允許許多不安全的編碼樣式。 從Java語言規范 :
如果未明確聲明為final,則在ResourceSpecification中聲明的資源將被隱式聲明為final(第4.12.4節)。
如果資源不是final
,那么在try
塊中可能會重新分配它們,從而導致資源泄漏。 由於它們(隱式或顯式)是final
,因此編譯器必須做很多額外的工作以確保在輸入try
資源規范時肯定未分配變量。 它可能還需要更改final
的編譯器語義,因為在try
塊退出后變量確實不應該有一個有效值; 當然不是try
資源規范中賦給它們的值。 最干凈(也許唯一)要做的是在try
塊退出時使變量超出范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.