天天看點

使用AutoCloseable實作資源自動關閉 | 帶你學《Java語言進階特性》之十七

上一篇:讓String擁有變化之力 | 帶你學《Java語言進階特性》之十六

【本節目标】

通過閱讀本節内容,你将先實作手動關閉資源,并嘗試結合異常處理機制使用AutoCloseable實作資源的自動關閉,對此類邏輯有一個初步的認識。

AutoCloseable接口

AutoCloseable主要是用于日後進行資源開發的處理上,以實作資源的自動關閉(釋放資源),例如:在以後進行檔案、網絡以及資料庫開發的過程中,由于伺服器的資源有限,是以使用之後一定要關閉資源,這樣才可以被更多的使用者所使用。

下面為了更好的說明資源的問題,将通過一個消息的發送處理來完成。

範例:手工實作資源處理

interface IMessage {
    public void send();    //消息發送
}
class NetMessage implements IMessage {        //實作消息的處理機制
    private String msg;
    public NetMessage(String msg) {
        this.msg = msg;
    }
    @Override
    public void send() {
        if (this.open()) {
            System.out.println("【*** 發送消息 ***】" + this.msg);
        }
    }
    public boolean open() {      //擷取資源連接配接
        System.out.println("【OPEN】擷取消息發送連接配接資源") ;
        return true ;
    }
    public void close() {
        System.out.println("【CLOSE】關閉消息發送通道") ;
    }
}
public class JavaAPIDemo {
    public static void main(String[] args) {
         NetMessage nm = new NetMessage("www.mldn.cn") ;         //定義要發送的處理
   nm.send() ;             //消息發送
          nm.close() ;           //關閉連接配接
    }  
}           
使用AutoCloseable實作資源自動關閉 | 帶你學《Java語言進階特性》之十七

圖一 手工實作資源處理

此時有人說,既然所有的資源完成處理後都必須進行關閉操作,那麼能否實作一種自動關閉呢?在這樣的要求下,由此推出了AutoCloseable通路接口,這個接口是在JDK1.7的時候提供的,并且該接口隻提供有一個方法:

關閉方法:public void close() throws Exception;

使用AutoCloseable實作資源自動關閉 | 帶你學《Java語言進階特性》之十七

圖二 AutoCloseable

要想實作自動關閉處理,除了要使用AutoCloseable外,還需要結合異常處理語句才可以正常調用。

範例:實作自動關閉處理

public class JavaAPIDemo {
    public static void main(String[] args) throws Exception{
        try (IMessage nm = new NetMessage("www.mldn.cn")){
            nm.send();      //消息發送
        }catch (Exception e){}

    }
}
interface IMessage extends AutoCloseable{
    void send();     //消息發送
}
class NetMessage implements IMessage {      //實作消息的處理機制
    private String msg;
    public NetMessage(String msg) {
        this.msg = msg;
    }
    @Override
    public void send() {
        if (this.open()) {
            System.out.println("【*** 發送消息 ***】" + this.msg);
        }
    }
    public boolean open() {       //擷取資源連接配接
        System.out.println("【OPEN】擷取消息發送連接配接資源");
        return true;
    }
    @Override
    public void close() throws Exception{
        System.out.println("【CLOSE】關閉消息發送通道");
    }
}           
使用AutoCloseable實作資源自動關閉 | 帶你學《Java語言進階特性》之十七

圖三 實作自動關閉處理

在以後的章節之中會接觸到資源的關閉問題,往往都會見到AutoCloseable接口的使用。

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:Runtime類:為Java運作保駕護航 | 帶你學《Java語言進階特性》之十八 更多Java面向對象程式設計文章檢視此處