2011-07-13 38 views
5

在Java 7中新的Try-with-Resources語法中,我是否需要擔心資源的順序?在Java 7中試用資源?

try (InputStream in = loadInput(...); // <--- can these be in any order? 
    OutputStream out = createOutput(...)){ 
    copy(in, out); 
} 
catch (Exception e) { 
    // Problem reading and writing streams. 
    // Or problem opening one of them. 
    // If compound error closing streams occurs, it will be recorded on this exception 
    // as a "suppressedException". 
} 
+1

如果資源依賴於*彼此*,則(好吧,「可能」取決於他們如何做)。否則......不。 – 2011-07-13 03:10:18

回答

7

當且僅當使用正常try {創建資源} finally {close resources}語法時,重要的順序至關重要。首先獲得的資源將最後關閉。詳情請參閱the technotes

0

其實訂單並不重要。理想情況下,如果資源不相關,則可以按任意順序打開它們,並且可以按任何順序關閉它們。

如果資源是相關的,你必須按照順序來創建它們,例如首先創建Connection,然後PreparedStatement,我沒有任何證據,但我認爲java以FIFO順序關閉資源以避免任何依賴性問題。

0

如果資源的打開取決於打開的另一個資源,那麼這很重要。例如,如果B的開放要求A被打開,那麼您顯然希望首先打開A.另一件需要注意的是,資源按照與它們打開相反的順序關閉。例如,如果您打開A然後打開B,則當資源嘗試關閉它們時,B先關閉,然後A關閉。