您好,登錄后才能下訂單哦!
這篇文章主要介紹了Closeable和AutoCloseable有哪些區別,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
導讀:我們知道,在java中jvm虛擬機會自動去調用gc(垃圾回收器)去回收堆中沒有被引用的對象,至于什么時候回收,是不確定的,同時有些是用到其他資源,jvm也不會進行回收,類似Io流中的FileInputStream使用到了硬盤資源,垃圾回收器是不會去回收的,因此,必須手動關閉掉。我們進行手動的編寫close()方法進行關閉,然而,每次這些寫會造成代碼冗余不優雅,JDK中對于釋放資源有Closeable和AutoCloseable可以使用,以下為詳解。、
在java.io.包下 InputStream,outputStream, Reader, Writer 等基類都實現了Closeable接口,因為每次的IO操作結束之后都要去釋放資源。
如果在調用此方法之前 stream已經關閉 ,則方法失效;
建議先關閉內部的資源,并標記為已關閉;
優先拋出IO異常;
AutoCloseable接口位于java.lang包下,從JDK1.7開始引入。
由于位于java.lang包下,可以針對于所有實現該接口的流,而closable本身也實現了該接口,java的io流間接性的可以自動關閉接口,也就是說從jdk1.7開始,不需要手動去關流。
AutoCloseable源碼
在1.7之前,我們通過try{} finally{} 在finally中釋放資源。
在finally中關閉資源存在以下問題:
自己要手動寫代碼做關閉的邏輯;
有時候還會忘記關閉一些資源;
關閉代碼的邏輯比較冗長,不應該是正常的業務邏輯需要關注的;
很顯然是很繁瑣的。jdk1.7之后采用{try}-with-resources的解釋
將可能拋出異常的代碼塊放入到try塊中,在try結束的時候,會自動將這些資源關閉(調用close方法)。
帶資源的try語句的3個關鍵點:
由帶資源的try語句管理的資源必須是實現了AutoCloseable接口的類的對象。
在try代碼中聲明的資源被隱式聲明為final。
通過使用分號分隔每個聲明可以管理多個資源。
這樣看起來是不是簡單,舒服很多
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Closeable和AutoCloseable有哪些區別”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。