JAVA常用类--AutoCloseable接口
AutoCloseable接口
自动关闭,释放资源机制
在实际的项目开发过程中,一般都有可能连接到一些资源,比如:文件资源、网络资源、数据库资源,在实际项目之中进行资源访问的社会一般有如下几个操作步骤:
不使用AutoCLoseable:
手动定义关闭函数
按照正常的结构设计来讲,当前的程序已经可以满足整个设计上的开发要求,因为有正常的连接同时又可以进行服务器断开访问
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
//接口
interface IMessage{
public void send(String msg);//发送消息的核心功能
}
//实现接口的类
class NetMassage implements IMessage{
//无参构造
//当前的设计为:只要实例化了此类对象就表示要进行消息的发送。则就需要连接网络服务器
public NetMassage() {
System.out.println("【连接】连接远程服务器,创建消息的服务通道....");
}
@Override
public void send(String msg) {
System.out.println("【发送】"+ msg);//模拟数据的发送
}
//关闭/释放资源
public void close(){
System.out.println("【关闭】网络消息发送完毕,断开服务连接器...");
}
}
public class Application {
public static void main(String[] args) {
//实例化
NetMassage massage = new NetMassage();//创建消息发送类
massage.send("发送消息啦!!");
massage.close();//释放资源
}
}
运行结果如下:
【连接】连接远程服务器,创建消息的服务通道....
【发送】发送消息啦!!
【关闭】网络消息发送完毕,断开服务连接器...
虽然以上代码已经可以正常实现网络消息的处理模型,但当前的程序本身又存在以下几个问题:
- 按照正常的设计开发的结构来讲,此时的程序应该是面向接口的开发,应该在接口里面提供所有的核心业务功能
- 如果此时通过子类获取IMessage接口对象,会发现无法正常的进行close()方法的调用
- 既然所有的资源在操作完毕之后都需要关闭,那么就可以有一种自动关闭的机制-----AutoCloseable
- 注意:JDK1.7以上有AutoCloseable
使用AutoCloseable:
必须和异常处理语句一起使用!!!!
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
//接口 继承AutoCloseable类(实现自动关闭)
// AutoCloseable类要和异常捕获一起使用!!!
interface IMessage extends AutoCloseable{
public void send(String msg);//发送消息的核心功能
}
//实现接口的类
class NetMassage implements IMessage{
//无参构造
//当前的设计为:只要实例化了此类对象就表示要进行消息的发送。则就需要连接网络服务器
public NetMassage() {
System.out.println("【连接】连接远程服务器,创建消息的服务通道....");
}
@Override
public void send(String msg) {
System.out.println("【发送】"+ msg);//模拟数据的发送
}
//关闭/释放资源
public void close(){
System.out.println("【关闭】网络消息发送完毕,断开服务连接器...");
}
}
public class Application {
public static void main(String[] args) {
//AutoCloseable类要和异常处理语句一起使用!!!
try ( NetMassage massage = new NetMassage();){
massage.send("发送消息啦!!");
} catch (Exception e) {
}
//massage.close();//释放资源
}
}
运行结果如下:
【连接】连接远程服务器,创建消息的服务通道....
【发送】发送消息啦!!
【关闭】网络消息发送完毕,断开服务连接器...
在运行过程中有异常抛出也可以自动关闭: send函数修改如下
@Override
public void send(String msg) {
if(msg.contains("发送消息")){ //手动抛出异常
throw new RuntimeException("异常抛出!!");
}
System.out.println("【发送】"+ msg);//模拟数据的发送
}
运行结果如下:
【连接】连接远程服务器,创建消息的服务通道....
【关闭】网络消息发送完毕,断开服务连接器...
通过以上的代码可以发现,必须结合异常处理语句之后才可以使用自动关闭的处理机制,如果在调用的过程之中出现有异常close()方法也是可以正常执行调用的