AutoCloseable 接口| 学习笔记

简介: 快速学习 AutoCloseable 接口

开发者学堂课程【Java高级编程AutoCloseable 接口】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/20/detail/316


AutoCloseable 接口

AutoCloseable 主要是用于日后进行资源开发的处理上,以实现资源的自动关闭(释放)

例如:在以后进行文件、网络、数据库开发的过程之中由于服务器的资源有限,所以使用之后一定要关闭资源,这样才可以被更多的使用者所使用。

为了更好的说明资源的问题,将通过一个消息的发送处理来完成。

一.范例:手工实现资源处理

package cn.mldn . demo;

public class JavaAPIDemo {

public static void main(String[ ] args) {

NetMessage nm_= new NetMessage("www.mldn.cn") ; //定义要发送的处理

if (nm.open()) { //是否打开了链接

nm.send(); //消息发送

nm.close(); //关闭链接

}

}

}

interface IMessage {

public void send(); //消息发送

}

class NetMessage implements IMessage { //实现消息的处理机制

private string msg;

public NetMessage(Sring msg){

this.msg = msg ;

}

public boolean open() { //获取资源链接

System.out.printin("【EOPEN】获取消息发送连接资源。");

return true ;

}

@Override

public void send() }

if (this.open()) {

System.out.println( " 【***发送消息***】”+ this.msg);

}

}

public void close() {

System.out.println(“ 【CLOSE】关闭消息发送通道。);

}

}

此时实现了一个模拟代码的处理流程,但有个问题,既然所有的资源完成处理之后都必须进行关闭操作,那么能否实现一种自动关闭的功能呢?

在这样的要求下,推出了 AutoCloseable 访问接口,这个接口是在 JDK1.7 的时候提供的,并且该接口只提供有一个方法。

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

图片2.png


二.范例:实现自动关闭处理

package cn.mldn . demo;

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 {

public void send(); //消息发送

}

class NetMessage implements IMessage { //实现消息的处理机制

private string msg;

public NetMessage(Sring msg){

this.msg = msg ;

}

public boolean open() { //获取资源链接

System.out.printin("【EOPEN】获取消息发送连接资源。");

return true ;

}

@Override

public void send() }

if (this.open()) {

System.out.println( " 【***发送消息***】”+ this.msg);

}

}

public void close() throws Exception {

System.out.println(“ 【CLOSE】关闭消息发送通道。);

}

}

在整个的过程中,只有结合了 AutoCloseable ,整个程序才能实现自动的Close 调用,这种操作形式是在 JDK1.7 之后新增的处理,在以后的章节之中会接触到资源的关闭问题,往往都会见到 AutoCloseable 接口的使用。

这个接口要和异常捆绑在一起明确使用才能正确完成。



            </div>
相关文章
|
机器学习/深度学习 人工智能 算法
【悬念揭秘】ML.NET:那片未被探索的机器学习宝藏,如何让普通开发者一夜变身AI高手?——从零开始,揭秘构建智能应用的神秘旅程!
【8月更文挑战第28天】ML.NET 是微软推出的一款开源机器学习框架,专为希望在本地应用中嵌入智能功能的 .NET 开发者设计。无需深厚的数据科学背景,即可实现预测分析、推荐系统和图像识别等功能。它支持多种数据源,提供丰富的预处理工具和多样化的机器学习算法,简化了数据处理和模型训练流程。
307 1
|
存储 机器学习/深度学习 算法
聚合签名、门限签名、Multisigs 和多签名
该文章深入探讨了数字签名在区块链技术中的应用,并比较了聚合签名、门限签名和多签名三种方案的异同,同时介绍了MuSig2和FROST这两种旨在提高区块链平台多签名或门限签名效率的提案。
474 3
聚合签名、门限签名、Multisigs 和多签名
|
SQL Java 关系型数据库
「会员卡管理系统」 · Java Swing + MySQL JDBC开发
「会员卡管理系统」 · Java Swing + MySQL JDBC开发
636 0
「会员卡管理系统」 · Java Swing + MySQL JDBC开发
|
数据可视化 数据处理 语音技术
《Python 语音转换简易速速上手小册》第5章 音频数据处理(2024 最新版)(上)
《Python 语音转换简易速速上手小册》第5章 音频数据处理(2024 最新版)
350 0
|
存储 SQL 分布式计算
当流计算邂逅数据湖:Paimon 的前生今世
希望通过笔者以下的经历,回顾流计算一步一步扩大场景的过程,并引出 Apache Paimon 的前生今世。
1913 0
当流计算邂逅数据湖:Paimon 的前生今世
|
Ubuntu Linux
Linux查看系统发行版版本信息
在Linux中查看系统发行版版本信息有多种方法,包括使用`lsb_release`命令、查看`/etc/*-release`文件、`uname -a`、`/proc/version`、YUM或APT命令,以及特定发行版文件和命令。图形界面和在线资源也是获取信息的途径。不同的方法适用于不同系统配置。
864 0
|
分布式计算 DataWorks API
基于pyodps对MaxComputer表的数据探查
本次脚本设计是针对大批量表,并且没有明确业务支持下的数据探查,会根据不同的类型进行判定,根据结果值进行分析得出结论,并给出一定的建议,同时该脚本仅仅支持普通表,一级分区表和二级分区表;一级分区表的分区字段必须是ds或者pt。
1191 0
|
机器学习/深度学习 JSON 并行计算
|
Java 区块链
使用web3j实现abi转java
使用web3j实现abi转java
使用web3j实现abi转java