天天看點

Closeable

JDK7之前的版本在釋放資源的時候,使用的try-catch-finally來操作資源。

其中,try代碼塊中使用擷取、修改資源,catch捕捉資源操作異常,finally代碼塊來釋放資源。

問題來了,finally代碼塊中的<code>fos.close()</code>出現了異常,将會阻止<code>dos.close()</code>的調用,進而導緻dos沒有正确關閉而保持開放狀态。

解決方法是把finally代碼塊中的兩個fos和dos的關閉繼續套在一個try-catch-finally代碼塊中。

JDK7之後有了帶資源的try-with-resource代碼塊,隻要實作了AutoCloseable或Closeable接口的類或接口,都可以使用該代碼塊來實作異常處理和資源關閉異常抛出順序。

我們可以發現,在新版本的資源try-catch中,我們已經不需要對資源進行顯示的釋放,而且所有需要被關閉的資源都能被關閉。

需要注意的是,資源的close方法的調用順序與它們的建立順序是相反的。