上一篇:让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访问接口,这个接口是在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面向对象编程文章查看此处