溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Closeable和AutoCloseable有哪些區(qū)別

發(fā)布時(shí)間:2021-06-16 14:16:27 來(lái)源:億速云 閱讀:194 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹了Closeable和AutoCloseable有哪些區(qū)別,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

導(dǎo)讀:我們知道,在java中jvm虛擬機(jī)會(huì)自動(dòng)去調(diào)用gc(垃圾回收器)去回收堆中沒(méi)有被引用的對(duì)象,至于什么時(shí)候回收,是不確定的,同時(shí)有些是用到其他資源,jvm也不會(huì)進(jìn)行回收,類似Io流中的FileInputStream使用到了硬盤資源,垃圾回收器是不會(huì)去回收的,因此,必須手動(dòng)關(guān)閉掉。我們進(jìn)行手動(dòng)的編寫close()方法進(jìn)行關(guān)閉,然而,每次這些寫會(huì)造成代碼冗余不優(yōu)雅,JDK中對(duì)于釋放資源有Closeable和AutoCloseable可以使用,以下為詳解。、

Closeable

Closeable源碼

Closeable和AutoCloseable有哪些區(qū)別

使用close需要注意

在java.io.包下 InputStream,outputStream, Reader, Writer 等基類都實(shí)現(xiàn)了Closeable接口,因?yàn)槊看蔚腎O操作結(jié)束之后都要去釋放資源。

  • 如果在調(diào)用此方法之前 stream已經(jīng)關(guān)閉 ,則方法失效;

  • 建議先關(guān)閉內(nèi)部的資源,并標(biāo)記為已關(guān)閉;

  • 優(yōu)先拋出IO異常;

AutoCloseable

AutoCloseable接口位于java.lang包下,從JDK1.7開(kāi)始引入。

由于位于java.lang包下,可以針對(duì)于所有實(shí)現(xiàn)該接口的流,而closable本身也實(shí)現(xiàn)了該接口,java的io流間接性的可以自動(dòng)關(guān)閉接口,也就是說(shuō)從jdk1.7開(kāi)始,不需要手動(dòng)去關(guān)流。

AutoCloseable源碼

Closeable和AutoCloseable有哪些區(qū)別

{try}-with-resources的使用注意

在1.7之前,我們通過(guò)try{} finally{} 在finally中釋放資源。

  • 在finally中關(guān)閉資源存在以下問(wèn)題:

  • 自己要手動(dòng)寫代碼做關(guān)閉的邏輯;

  • 有時(shí)候還會(huì)忘記關(guān)閉一些資源;

  • 關(guān)閉代碼的邏輯比較冗長(zhǎng),不應(yīng)該是正常的業(yè)務(wù)邏輯需要關(guān)注的;

Closeable和AutoCloseable有哪些區(qū)別

很顯然是很繁瑣的。jdk1.7之后采用{try}-with-resources的解釋

將可能拋出異常的代碼塊放入到try塊中,在try結(jié)束的時(shí)候,會(huì)自動(dòng)將這些資源關(guān)閉(調(diào)用close方法)。

{try}-with-resources關(guān)鍵點(diǎn)

帶資源的try語(yǔ)句的3個(gè)關(guān)鍵點(diǎn):

  • 由帶資源的try語(yǔ)句管理的資源必須是實(shí)現(xiàn)了AutoCloseable接口的類的對(duì)象。

  • 在try代碼中聲明的資源被隱式聲明為final。

  • 通過(guò)使用分號(hào)分隔每個(gè)聲明可以管理多個(gè)資源。

Closeable和AutoCloseable有哪些區(qū)別

這樣看起來(lái)是不是簡(jiǎn)單,舒服很多

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Closeable和AutoCloseable有哪些區(qū)別”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

jdk
AI