AutoCloseable 源码解析

AutoCloseable

 今天读源码读到了这个接口,就是想知道这个是干嘛的,看名字的意思是可自动关闭的。
 点开的源码发现这个接口只有一个方法。
package java.lang;
public interface AutoCloseable {
   /**
	 * 关闭此资源,放弃任何底层资源。在try-with-resources语句管理的对象上自动调用此方法。 
	 * 虽然这个接口方法被声明为抛出Exception,但强烈建议实现者声明close方法的具体实现,
	 * 以抛出更具体的异常,或者如果close操作不会失败,则根本不抛出异常。 
	 * 关闭操作可能失败的情况需要实现者仔细注意。强烈建议在抛出异常之前放弃底层资源并在内部将资源标记为关闭。
	 * close方法不太可能被多次调用,因此这确保了及时释放资源。此外,它减少了资源包装或被其他资源包装时可能出现的问题。
	 * 强烈建议该接口的实现者不要让close方法抛出InterruptedException异常。
	 * 此异常与线程的中断状态交互,如果抑制InterruptedException,则很可能发生运行时错误行为。
	 * 更一般地说,如果它会导致异常被抑制的问题,则使用AutoCloseable。关闭方法不应该抛出它。
	 * 注意,与java.io的close方法不同。可封闭的,这种封闭方法并不要求是幂等的。换句话说,与Closeable不同,
	 * 多次调用这个close方法可能会有一些可见的副作用。关闭,如果调用多次,则要求关闭没有效果。然而,
	 * 这个接口的实现者被强烈鼓励使其接近的方法幂等。
     */
    void close() throws Exception;
}

实现这个接口的目的就是在操作资源的时候,使用try-with-resources管理资源,当异常或者正常退出的时候资源都能得到有效的释放。

写了一个小列子

package com.nw.jdktest;

public class AutoCloseObject implements AutoCloseable {
    @Override
    public void close() throws Exception {
        System.out.println("我是一个可以自动释放资源的类");
    }

    public void callFun() {
        System.out.println("我正在叫");
    }

    //测试一下这个类
    public static void main(String[] args) {

        //可以自动释放这个类的资源
        try (AutoCloseObject autoCloseObject = new AutoCloseObject()) {
            autoCloseObject.callFun();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.out.println("方法执行完毕");
        }
    }
}


//最后的结果
我正在叫
我是一个可以自动释放资源的类
方法执行完毕
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BingShuBlog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值