当前位置: 首页 > news >正文

Java AutoCloseable接口

目录

1 基本概念

1.1 接口定义

1.2 使用场景

2 AutoCloseable实现类

2.1 java.io 包下的类

2.2 java.nio 包下的类(非阻塞I/O) 

2.3 java.sql 包下的类(JDBC API)

2.4 java.util.zip 包下的类 

2.5 java.security 包下的类

2.6 javax.crypto 包下的类 

2.7 java.net 包下的类 

2.8 其他类 

3 自定义类实现 AutoCloseable


AutoCloseable 接口是 Java 中用于定义那些必须在使用后关闭的资源的对象。这个接口是在 Java 7 中引入的,目的是为了支持 try-with-resources 语句,这是一种自动管理资源(如文件或网络连接)的方式,确保这些资源在使用完毕后能够被正确地关闭,从而避免资源泄露。

1 基本概念

1.1 接口定义

AutoCloseable 接口非常简单,它只有一个方法:

public interface AutoCloseable {void close() throws Exception;
}
  • close() 方法:当一个实现 AutoCloseable 的对象不再需要时,调用此方法来释放其占用的资源。该方法可以抛出异常,通常用来表示无法正常关闭资源的情况。
1.2 使用场景

任何需要在使用后显式关闭以释放系统资源的对象都应该实现 AutoCloseable 接口。常见的例子包括文件、数据库连接、网络连接等。 

try-with-resources语句参考

2 AutoCloseable实现类

在Java中,许多类都实现了 AutoCloseable 接口,这些类通常涉及对系统资源的管理,比如文件、数据库连接、网络连接等。下面是一些常见的实现 AutoCloseable 接口的类:

2.1 java.io 包下的类
  • FileInputStream
  • FileOutputStream
  • BufferedReader
  • BufferedWriter
  • DataInputStream
  • DataOutputStream
  • PrintWriter
  • Scanner
2.2 java.nio 包下的类(非阻塞I/O) 
  • FileChannel
  • SocketChannel
  • ServerSocketChannel
  • DatagramChannel
  • Selector
2.3 java.sql 包下的类(JDBC API)
  • Connection
  • Statement
  • PreparedStatement
  • ResultSet
2.4 java.util.zip 包下的类 
  • ZipFile
  • GZIPOutputStream
  • GZIPInputStream
2.5 java.security 包下的类
  • KeyStore
2.6 javax.crypto 包下的类 
  • CipherInputStream
  • CipherOutputStream
  • Mac
  • SecretKeyFactory
2.7 java.net 包下的类 
  • Socket
  • ServerSocket
2.8 其他类 
  • java.util.Scanner 用于读取输入
  • java.util.zip.ZipFile 用于处理ZIP文件
  • java.util.concurrent.locks.ReentrantLock 的 newCondition() 方法返回的 Condition 对象

3 自定义类实现 AutoCloseable

如果你需要创建一个自定义的资源管理类,你可以让它实现 AutoCloseable 接口,并提供 close() 方法来释放资源。例如:

import java.io.Closeable;
import java.io.IOException;public class MyResource implements AutoCloseable {private boolean open = true;public void doSomething() throws IOException {if (!open) {throw new IOException("Resource is not open");}// 执行一些操作}@Overridepublic void close() throws IOException {if (open) {// 关闭资源open = false;}}
}

然后你可以在 try-with-resources 语句中使用这个自定义类:

public class CustomResourceExample {public static void main(String[] args) {try (MyResource resource = new MyResource()) {resource.doSomething();} catch (IOException e) {System.out.println("Error: " + e.getMessage());}}
}

这样就可以确保你的自定义资源也会被正确地关闭。

try-with-resources参考Java try-with-resources语句-CSDN博客


http://www.mrgr.cn/news/45165.html

相关文章:

  • fsadsafsa
  • SpringBoot3响应式编程全套-Spring Webflux
  • 【PyTorch学习-1】张量操作|自动求导|神经网络模块|优化器|数据加载与处理|GPU 加速...
  • [自然语言处理]概述
  • 桌面时钟哪个好?今年最热门的桌面时钟主题
  • SpringBoot实现电子文件签字+合同系统!
  • 找出n个自然数(1,2,3,……,n)中取r个数的组合。
  • wsl环境下安装Ubuntu,并下载MySQL5.7
  • 倍思M2s Pro推动TWS蓝牙耳机新风尚:技术革新与未来趋势解析
  • python 实现最小路径和算法
  • 华为 HCIP-Datacom H12-821 题库 (33)
  • 【CKA】CKA第一次考试经验总结
  • 大数据-158 Apache Kylin 安装配置详解 集群模式启动
  • 爱心曲线公式大全
  • 【FastAPI】在FastAPI中实现用户登录和Token认证(JWT)并展示到Swagger UI
  • 移动语义和完美转发
  • 容器化技术:Docker的基本概念和使用
  • 全是细节|大模型SFT的100个关键点
  • 【Android】限制TextView大小并允许滑动
  • 【自动驾驶】《Planning-oriented Autonomous Driving》UniAD论文阅读笔记