使用AutoCloseable实现资源自动关闭 | 带你学《Java语言高级特性》之十七

简介: 资源往往是有限的,所以我们不能无限的只去创建、调用资源而不及时关闭。为了免去大量的手动关闭操作,Java推出了AutoCloseable接口。

上一篇:让String拥有变化之力 | 带你学《Java语言高级特性》之十六
【本节目标】
通过阅读本节内容,你将先实现手动关闭资源,并尝试结合异常处理机制使用AutoCloseable实现资源的自动关闭,对此类逻辑有一个初步的认识。

AutoCloseable接口

AutoCloseable主要是用于日后进行资源开发的处理上,以实现资源的自动关闭(释放资源),例如:在以后进行文件、网络以及数据库开发的过程中,由于服务器的资源有限,所以使用之后一定要关闭资源,这样才可以被更多的使用者所使用。
下面为了更好的说明资源的问题,将通过一个消息的发送处理来完成。
范例:手工实现资源处理

interface IMessage {
    public void send();    //消息发送
}
class NetMessage implements IMessage {        //实现消息的处理机制
    private String msg;
    public NetMessage(String msg) {
        this.msg = msg;
    }
    @Override
    public void send() {
        if (this.open()) {
            System.out.println("【*** 发送消息 ***】" + this.msg);
        }
    }
    public boolean open() {      //获取资源连接
        System.out.println("【OPEN】获取消息发送连接资源") ;
        return true ;
    }
    public void close() {
        System.out.println("【CLOSE】关闭消息发送通道") ;
    }
}
public class JavaAPIDemo {
    public static void main(String[] args) {
         NetMessage nm = new NetMessage("www.mldn.cn") ;         //定义要发送的处理
   nm.send() ;             //消息发送
          nm.close() ;           //关闭连接
    }  
}

image.png
图一 手工实现资源处理

此时有人说,既然所有的资源完成处理后都必须进行关闭操作,那么能否实现一种自动关闭呢?在这样的要求下,由此推出了AutoCloseable访问接口,这个接口是在JDK1.7的时候提供的,并且该接口只提供有一个方法:

关闭方法:public void close() throws Exception;

image.png
图二 AutoCloseable

要想实现自动关闭处理,除了要使用AutoCloseable外,还需要结合异常处理语句才可以正常调用。
范例:实现自动关闭处理

public class JavaAPIDemo {
    public static void main(String[] args) throws Exception{
        try (IMessage nm = new NetMessage("www.mldn.cn")){
            nm.send();      //消息发送
        }catch (Exception e){}

    }
}
interface IMessage extends AutoCloseable{
    void send();     //消息发送
}
class NetMessage implements IMessage {      //实现消息的处理机制
    private String msg;
    public NetMessage(String msg) {
        this.msg = msg;
    }
    @Override
    public void send() {
        if (this.open()) {
            System.out.println("【*** 发送消息 ***】" + this.msg);
        }
    }
    public boolean open() {       //获取资源连接
        System.out.println("【OPEN】获取消息发送连接资源");
        return true;
    }
    @Override
    public void close() throws Exception{
        System.out.println("【CLOSE】关闭消息发送通道");
    }
}

image.png
图三 实现自动关闭处理

在以后的章节之中会接触到资源的关闭问题,往往都会见到AutoCloseable接口的使用。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:Runtime类:为Java运行保驾护航 | 带你学《Java语言高级特性》之十八
更多Java面向对象编程文章查看此处

相关文章
|
23天前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
4天前
|
Java Android开发 C++
Kotlin vs Java:选择最佳语言进行安卓开发
【4月更文挑战第13天】Java曾是安卓开发的主流语言,但Kotlin的崛起改变了这一局面。Google在2017年支持Kotlin,引发两者优劣讨论。Java以其成熟稳定、强大生态和跨平台能力占优,但代码冗长、开发效率低和语言特性过时是短板。Kotlin则以简洁语法、空安全设计和高度兼容Java脱颖而出,但社区和生态系统仍在发展中,可能存在学习曲线和性能问题。选择语言应考虑项目需求、团队熟悉度、维护性、性能和生态系统。无论选择哪种,理解其差异并适应新技术至关重要。
|
15天前
|
Java
Java语言打印九九乘法表(详解)
Java语言打印九九乘法表(详解)
13 1
Java语言打印九九乘法表(详解)
|
23天前
|
Java API 开发工具
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(三)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
30 0
|
23天前
|
Java 数据处理 数据库
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(二)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
33 0
|
23天前
|
存储 算法 Java
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(一)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
33 0
|
1月前
|
安全 IDE Java
Java语言基础
Java语言基础
12 0
|
1月前
|
Oracle 安全 Java
Java语言概述
Java语言概述
10 0
|
1月前
|
存储 Java 编译器
【详识JAVA语言】抽象类和接口
【详识JAVA语言】抽象类和接口
50 1
|
1月前
|
安全 Java 编译器
【详识JAVA语言】面向对象程序三大特性之三:多态
【详识JAVA语言】面向对象程序三大特性之三:多态
34 4