Java中try-with-resources的使用详解

 更新时间:2026年01月21日 09:46:51   作者:烟沙九洲  
try-with-resources 是 Java 开发中资源管理的首选方式,大大减少了资源泄漏的风险,提高了代码的可读性和可维护性,下面就来详细的介绍一下,感兴趣的可以了解一下

try-with-resourcesJava 7 引入的语法糖,用于 自动 管理资源(如文件流、数据库连接等),确保资源在使用后被正确关闭,避免资源泄漏。

语法糖 是什么?语法糖 (Syntactic Sugar)是计算机语言中对语法进行的一些改动,使得代码更易于人类阅读和编写,但并不改变语言的功能或表达能力。本质上,编译器 / 解释器会在背后把这些 "甜语法" 转换成语言原本的基础语法来执行。

回到我们的 try-with-resources

基本语法

try (ResourceType resource = new ResourceType()) {
    // 使用资源的代码
} catch (Exception e) {
    // 异常处理
}

资源类 必须实现 AutoCloseable 或 Closeable 接口:

public interface AutoCloseable {
    void close() throws Exception;
}

public interface Closeable extends AutoCloseable {
    void close() throws IOException;
}

传统 finally 方式(繁琐易出错):

BufferedReader br = null;
try {
    br = new BufferedReader(new FileReader("test.txt"));
    // 业务代码
} catch (IOException e) {
    e.printStackTrace();
} finally {
    // 必须判空 + 嵌套try-catch(close()也会抛异常)
    if (br != null) {
        try {
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

try-with-resources 方式(简洁健壮):

try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
    // 业务代码
} catch (Exception e) {
    e.printStackTrace();
}

单个资源

try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

多个资源(支持在括号内声明多个资源,用;分隔):

try (InputStream in = new FileInputStream("input.txt");
     OutputStream out = new FileOutputStream("output.txt")) {
    
    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = in.read(buffer)) != -1) {
        out.write(buffer, 0, bytesRead);
    }
} catch (IOException e) {
    e.printStackTrace();
}

资源顺序(多个资源按声明顺序关闭 - 后声明的先关闭):

// 声明顺序:Connection → PreparedStatement → ResultSet
try (Connection conn = DriverManager.getConnection(url, user, pwd);
     PreparedStatement ps = conn.prepareStatement("SELECT * FROM user");
     ResultSet rs = ps.executeQuery()) {
    // 业务逻辑
}
// 关闭顺序:ResultSet → PreparedStatement → Connection

try-with-resources 是 Java 开发中资源管理的首选方式,大大减少了资源泄漏的风险,提高了代码的可读性和可维护性。

到此这篇关于Java中try-with-resources的使用详解的文章就介绍到这了,更多相关Java try-with-resources内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java调用HTTPS接口的两种方式及完整代码

    Java调用HTTPS接口的两种方式及完整代码

    HTTPS是以安全为目标的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 ,HTTPS在HTTP的基础下加SSL,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL,本文给大家介绍了Java调用https接口的两种方式及完整代码,需要的朋友可以参考下
    2025-05-05
  • Java数据结构常见几大排序梳理

    Java数据结构常见几大排序梳理

    Java常见的排序算法有:直接插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序等。本文详解介绍它们的实现以及图解,需要的可以参考一下
    2022-03-03
  • Spring实战之使用Resource作为属性操作示例

    Spring实战之使用Resource作为属性操作示例

    这篇文章主要介绍了Spring实战之使用Resource作为属性,结合实例形式分析了spring载人Resource作为属性相关配置与使用技巧,需要的朋友可以参考下
    2020-01-01
  • java SpringMvc中拦截器的应用

    java SpringMvc中拦截器的应用

    大家好,本篇文章主要讲的是java SpringMvc中拦截器的应用,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • mybatis嵌套循环map方式(高级用法)

    mybatis嵌套循环map方式(高级用法)

    这篇文章主要介绍了mybatis嵌套循环map方式(高级用法),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • IDEA如何进行全局搜索图文教程

    IDEA如何进行全局搜索图文教程

    idea全称为IntelliJ IDEA,在业界被公认为最好用的Java开发工具之一,下面这篇文章主要给大家介绍了关于IDEA如何进行全局搜索的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • SpringBoot启动时自动执行指定方法的几种实现方式

    SpringBoot启动时自动执行指定方法的几种实现方式

    在Spring Boot应用程序中,要实现在应用启动时自动执行某些代码,本文主要介绍了SpringBoot启动时自动执行指定方法的几种方式,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-03-03
  • java反射超详细讲解

    java反射超详细讲解

    本文非常详细的讲解了java反射具体的内容以及使用,java反射在现今的使用中很频繁,希望此文可以帮大家解答疑惑,可以帮助大家理解
    2021-08-08
  • Spring Boot定制type Formatters实例详解

    Spring Boot定制type Formatters实例详解

    在本篇文章里小编给大家整理的是关于Spring Boot定制type Formatters实例知识点,需要的朋友们学习下。
    2019-11-11
  • java中重写父类方法加不加@Override详解

    java中重写父类方法加不加@Override详解

    这篇文章主要介绍了java中重写父类方法加不加@Override详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论