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");
        }
        // 执行一些操作
    }

    @Override
    public 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博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值