【本節目标】
通過閱讀本節内容,你将先實作手動關閉資源,并嘗試結合異常處理機制使用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通路接口,這個接口是在JDK1.7的時候提供的,并且該接口隻提供有一個方法:
關閉方法:public void close() throws Exception;
圖二 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的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:Runtime類:為Java運作保駕護航 | 帶你學《Java語言進階特性》之十八 更多Java面向對象程式設計文章檢視此處