20、try-with-resources资源管理详解

try-with-resources 是Java7引入的一个语法,旨在简化资源的管理,自动关闭实现了`AutoCloseable`或`Closeable`接口的资源对象,如 InputStream、OutputStream、FileReader、BufferedReader等。

在传统的try-catch语法中,我们通常需要在finally块中显式关闭资源,这样容易出现资源未能正确关闭的情况。而try-with-resources语法可以自动管理资源的关闭,减少了代码量,也降低了出错的风险。

语法格式:

try (ResourceType resource = new ResourceType()) {
    // 使用资源的代码
} catch (ExceptionType e) {
    // 异常处理代码
} finally {
    // 可选的finally块
}

一、try-catch与try-with-resources用法:

1、try-catch示例:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
 
public class TryCatchDemo {
 
    public static void main(String[] args) {
        String path = "path.txt";
        BufferedReader br = null;
 
        try {
            br = new BufferedReader(new FileReader(path));
            String line = br.readLine();
            while (line != null) {
                System.out.println(line);
                line = br.readLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

2、try-with-resources示例:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
 
public class TryWithResourcesDemo {
 
    public static void main(String[] args) {
        String path = "path.txt";
 
        try (BufferedReader br = new BufferedReader(new FileReader(path))) {
            String line = br.readLine();
            while (line != null) {
                System.out.println(line);
                line = br.readLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

二、try-catch与try-with-resources比较:

特性

try-catch

try-with-resources

主要用途

捕获异常并处理

自动管理资源的关闭,并处理异常

资源管理

需要手动管理资源的关闭

自动关闭实现了 AutoCloseable/Closeable 的资源

代码简洁性

代码较长,尤其是手动管理资源时

更简洁,自动关闭资源

异常处理

需要显式捕获异常

资源关闭时抛出的异常会被附加到主异常上

多个资源管理

需要手动管理多个资源的关闭

可以同时管理多个资源,自动按顺序关闭

适用场景

普通异常捕获和处理

自动资源管理,尤其是文件、流、数据库连接等资源

 

三、try-with-resources底层原理:

try-with-resources语法要求在 try块中声明的资源对象必须实现 AutoCloseable或Closeable接口。这样,Java编译器就会在字节码中自动生成相应的关闭代码(编译器会为每个资源生成一个finally块,这个finally块负责调用资源的close()方法)),确保资源的正确释放

 

posted on 2024-12-15 23:09  爱文(Iven)  阅读(18)  评论(0编辑  收藏  举报

导航