AutoCloseable接口
随机互联网的不断发展,资源的使用也越发频繁,同时资源也很紧张,为了合理地保护资源必须进行资源释放处理。而在项目开发中,网络服务器和数据库的资源也是相当宝贵的,在每次操作完后一一定要及时释放才能供更多的用户使用。在最初的JDK版本都是在各个程序中提供相应的资源释放操作,直到JDK 1.7版本开始提供AutoCloseable接口,该接口的主要功能是结合异常处理结构在资源操作完成后实现自动释放功能,接口定义如下。
public interface AutoCloseable {
//资源释放
public void close() throws Exception;
}
下面通过一个简单的信息发送和连接关闭的操作来演示AutoCloseable接口的使用,本程序的结构如图 1所示。
范例:使用AutoCloseable自动释放资源
package edu.zhku.test;
public class AutoCloseableTestDemo {
public static void main(String[] args) {
//自动关闭机制需要在try语句中获取实例化对象,才会在执行完毕时自动调用close()方法
try (IMessage iMessage01 = new NetMessage("Hello, Java--")) {
//发送消息
iMessage01.send();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("====================");
//不管是否产生异常,最终都会调用AutoCloseable接口的close()方法
try (IMessage iMessage02 = new NetMessage("Hello, Java--AutoCloseable")) {
//发送消息
iMessage02.send();
} catch (Exception e) {
e.printStackTrace();
}
}
}
//继承AutoCloseable接口
interface IMessage extends AutoCloseable {
//消息发送
public void send();
}
class NetMessage implements IMessage {
//消息内容
private String msg;
public NetMessage(String msg) {
this.msg = msg;
}
//获取信息发送连接资源
public Boolean open() {
System.out.println("open----获取信息发送连接资源");
//返回成功标记
return true;
}
//重写send()方法
@Override
public void send() {
//链接已接通
if (this.open()) {
//抛出异常
if (this.msg.contains("AutoCloseable")) {
throw new RuntimeException("Java");
}
System.out.println("发送消息:" + this.msg);
}
}
//重写close()方法,自动关闭
@Override
public void close() throws Exception {
System.out.println("close-----关闭消息发送通道");
}
}
/*
程序执行结果:
open----获取信息发送连接资源
发送消息:Hello, Java--
close-----关闭消息发送通道
====================
open----获取信息发送连接资源
close-----关闭消息发送通道
java.lang.RuntimeException: Java
at edu.zhku.test.NetMessage.send(AutoCloseableTestDemo.java:54)
at edu.zhku.test.AutoCloseableTestDemo.main(AutoCloseableTestDemo.java:19)
*/
本程序实现了自动关闭处理,并且通过结果执行可知,不管是否产生了异常都会调用close()方法进行资源释放。
注:此文章为本人个人笔记,若有错误,敬请指正。