try-with-resource

        try-with-resource是Java 7中引入的新特性,它可以方便地管理资源,自动关闭资源,从而避免了资源泄漏的问题。

作用 

        使用try-with-resource语句可以简化代码,避免了手动关闭资源的繁琐操作,同时还可以保证资源的正确关闭,避免了资源泄漏的问题。

语法结构

try (ResourceType resource = new ResourceType(args...)) {
    // 代码块
} catch (ExceptionType e) {
    // 异常处理
}

        在try关键字后面的括号中声明并初始化一个或多个资源。注意:【这些资源必须实现AutoCloseable接口,这个接口中只有一个方法close(),用于关闭资源】

 在代码块执行完毕之后,Java会自动调用这些资源的close()方法,释放资源。

示例

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

        在这个示例中,我们使用try-with-resource读取文件中的内容。try关键字后面的括号中声明了一个BufferedReader对象,它会自动关闭。在代码块中,我们使用readLine()方法读取文件的每一行,并打印出来。在catch块中捕获IOException异常,并输出错误信息。

底层

try-with-resources的语法形式类似于语法糖

编译器会将try-with-resources语句转换为普通的try-catch语句,并在finally块中自动调用资源的close()方法来关闭资源。

        try-with-resources的底层实现依赖于Java虚拟机的异常处理机制和字节码的异常表,通过自动调用资源的close()方法来确保资源被正确地关闭。

        1、Java编译器会将try块中的资源转换为一个虚拟的final变量,在try块结束时自动调用它们的close()方法来关闭资源。

        2、Java编译器为每个catch块生成一个异常处理器,并在字节码中的异常表中注册这些异常处理器。

        3、当try块中的代码执行时,如果发生异常,Java虚拟机会根据异常表中的信息查找匹配的异常处理器,并执行相应的操作。如果没有匹配的异常处理器,异常会被抛出到上一级调用者。

        4、当try块结束时,Java虚拟机会检查虚拟的final变量,并调用它们的close()方法。这个过程也会被包含在异常处理机制中,如果在关闭资源时发生异常,Java虚拟机会将这个异常封装到一个Suppressed异常中,并抛出到最终的异常处理器中。

注意:

AutoCloseable接口有个子接口——java.io.Closeableclose()方法不会抛出异常。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BroRiver

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值