开发者学堂课程【Java高级编程:AutoCloseable 接口】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/20/detail/316
AutoCloseable 接口
AutoCloseable 主要是用于日后进行资源开发的处理上,以实现资源的自动关闭(释放)。
例如:在以后进行文件、网络、数据库开发的过程之中由于服务器的资源有限,所以使用之后一定要关闭资源,这样才可以被更多的使用者所使用。
为了更好的说明资源的问题,将通过一个消息的发送处理来完成。
一.范例:手工实现资源处理
package cn.mldn . demo;
public class JavaAPIDemo {
public static void main(String[ ] args) {
NetMessage nm_= new NetMessage("www.mldn.cn") ; //定义要发送的处理
if (nm.open()) { //是否打开了链接
nm.send(); //消息发送
nm.close(); //关闭链接
}
}
}
interface IMessage {
public void send(); //消息发送
}
class NetMessage implements IMessage { //实现消息的处理机制
private string msg;
public NetMessage(Sring msg){
this.msg = msg ;
}
public boolean open() { //获取资源链接
System.out.printin("【EOPEN】获取消息发送连接资源。");
return true ;
}
@Override
public void send() }
if (this.open()) {
System.out.println( " 【***发送消息***】”+ this.msg);
}
}
public void close() {
System.out.println(“ 【CLOSE】关闭消息发送通道。);
}
}
此时实现了一个模拟代码的处理流程,但有个问题,既然所有的资源完成处理之后都必须进行关闭操作,那么能否实现一种自动关闭的功能呢?
在这样的要求下,推出了 AutoCloseable 访问接口,这个接口是在 JDK1.7 的时候提供的,并且该接口只提供有一个方法。
关闭方法: public void close() throws Exception;
二.范例:实现自动关闭处理
package cn.mldn . demo;
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 {
public void send(); //消息发送
}
class NetMessage implements IMessage { //实现消息的处理机制
private string msg;
public NetMessage(Sring msg){
this.msg = msg ;
}
public boolean open() { //获取资源链接
System.out.printin("【EOPEN】获取消息发送连接资源。");
return true ;
}
@Override
public void send() }
if (this.open()) {
System.out.println( " 【***发送消息***】”+ this.msg);
}
}
public void close() throws Exception {
System.out.println(“ 【CLOSE】关闭消息发送通道。);
}
}
在整个的过程中,只有结合了 AutoCloseable ,整个程序才能实现自动的Close 调用,这种操作形式是在 JDK1.7 之后新增的处理,在以后的章节之中会接触到资源的关闭问题,往往都会见到 AutoCloseable 接口的使用。
这个接口要和异常捆绑在一起明确使用才能正确完成。