当我们进行某些资源调用的时候,我们用完资源后需要进行关闭资源操作。其实java给我们提供了一个资源关闭接口供我们使用。它就是AutoCloseable。
举个例子:
//接口
public interface IOperateResources extends AutoCloseable{
public void sendMessage();
}
//资源操作类
public class MyMessage implements IOperateResources{
private String message;//发送数据
public MyMessage(String message){
this.message = message;
System.out.println("【资源连接】");
}
public void close(){
System.out.println("【资源关闭】");
}
@Override
public void sendMessage() {
System.out.println("【资源操作】---"+message);
}
}
//测试类
public class Test {
public static void main(String[] args) {
MyMessage message = new MyMessage("我正在操作资源...");
message.sendMessage();
message.close();
}
}
运行结果:
【资源连接】
【资源操作】---我正在操作资源...
【资源关闭】
从上面的例子我们可以看出,当我们使用资源完成我们的操作后,我们必须去手动调用close方法关闭资源。而使用了AutoCloseable后我们就不需要手动关闭了,我们更改上面的代码:
/**
* 接口继承了AutoCloseable接口
*/
public interface IOperateResources extends AutoCloseable{
public void sendMessage();
}
public class MyMessage implements IOperateResources{
private String message;//发送数据
public MyMessage(String message){
this.message = message;
System.out.println("【资源连接】");
}
/**
* 必须重写AutoCloseable接口中的close方法,在此方法中去进行一些关闭资源的操作
*/
@Override
public void close(){
System.out.println("【资源关闭】");
}
@Override
public void sendMessage() {
System.out.println("【资源操作】---"+message);
}
}
public class Test {
public static void main(String[] args) throws Exception {
//必须写在try catch里面,否则close方法不运行
try (MyMessage message = new MyMessage("我正在操作资源...")){
message.sendMessage();
}catch (Exception e){
}
}
}
运行结果:
【资源连接】
【资源操作】---我正在操作资源...
【资源关闭】
我们可以看到更改以后的代码,并没有调用close方法,但是还是打印出了“【资源关闭】”,这就说明我们的close方法是自动运行的。
AutoCloseable源码
public interface AutoCloseable {
void close() throws Exception;
}
我们可以看到AutoCloseable就只是一个接口,里面只写了一个close方法,所以在MyMessage类中需要重写close方法。