AutoCloseable接口

AutoCloseable接口

随机互联网的不断发展,资源的使用也越发频繁,同时资源也很紧张,为了合理地保护资源必须进行资源释放处理。而在项目开发中,网络服务器和数据库的资源也是相当宝贵的,在每次操作完后一一定要及时释放才能供更多的用户使用。在最初的JDK版本都是在各个程序中提供相应的资源释放操作,直到JDK 1.7版本开始提供AutoCloseable接口,该接口的主要功能是结合异常处理结构在资源操作完成后实现自动释放功能,接口定义如下。

public interface AutoCloseable {
    //资源释放
    public void close() throws Exception;
}

下面通过一个简单的信息发送和连接关闭的操作来演示AutoCloseable接口的使用,本程序的结构如图 1所示。

图 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()方法进行资源释放。


注:此文章为本人个人笔记,若有错误,敬请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

窝在角落里学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值