Java中如何通过try优雅地释放资源?

时间紧迫,长话短说,今天,小明给大家同步一个知识点,使用 try-with-resources来优雅地关闭资源。

1. 背景

其实,在JDK 7就已经引入了对 try-with-resources的支持,它的主要作用就是解放小明和小明小伙伴们的双手,帮助我们自动释放使用过的资源(比如输入、输出流)。

2. 例子

如何才能使用这个自动关闭资源的骚操作呢?我们只需要在try内声明和初始化资源即可,如下所示:

Java中如何通过try优雅地释放资源?

这样,当我们写入文件时,只需要将心思放在输入的内容就行啦。

3.使用try-with-resources的好处

在很久很久以前,你是不是和小明一样每每操作输入流、输出流的时候,用的都是 try-catch-finally代码块?

现在,答应我好嘛,作为小明的小伙伴,看完这篇文章后,再写代码时,不要再将就,务必使用 try-with-resources会更小明(优雅)一些。

接下来,我们简单地做个比较:

之前的小明

Java中如何通过try优雅地释放资源?
点评

整体感觉很传统,很冗长。

现在的小明

Java中如何通过try优雅地释放资源?
点评

整体感觉很轻巧,很优雅。

4. 还可以控制多个资源哦

如果我们想一边控制输入、一边控制输出怎么办?

通通放进去!如图所示

Java中如何通过try优雅地释放资源?

5.幕后功臣:Closeable

为什么把资源放进 try-with-resources,我们就可以束手旁观,高枕无忧呢?原来,要想合法进去 try-with-resources,不被报警,是需要门票的:实现 CloseableAutoCloseable接口,并重写 close方法。就像这样:

Java中如何通过try优雅地释放资源?

6.多个资源的情况下如何顺序关闭呢?

剧透:先创建的资源,最后关闭。

这个故事是这样讲的:小明和小红一起打王者荣耀……

小明:

Java中如何通过try优雅地释放资源?
小红:

Java中如何通过try优雅地释放资源?
全军出击:

Java中如何通过try优雅地释放资源?
故事纵览:

Java中如何通过try优雅地释放资源?

提问:结局是不是和剧透一致?

7. 补充

我们使用 try-with-resources的时候不仅可以优雅地释放资源,而且还可以传统一些,照常使用 catchfinally哦。

8. 总结

经过小明这么一番生动的讲解:

你是否知道了什么是 try-with-resources

你是否知道了如何用 try-with-resources替换 try-catch-finally

你是否知道了 AutoCloseable构建自定义资源以及关闭资源的顺序?

附Github源码地址:https://github.com/WhenCoding/coder-xiaoming

Original: https://www.cnblogs.com/coderxx/p/12690161.html
Author: Coder小明
Title: Java中如何通过try优雅地释放资源?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/713734/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Javaweb学习-HTML

    ; ; 重新开始HTML,之前学的都忘了 posted @2022-03-24 21:27 HelloHui 阅读(7 ) 评论() 编辑 Original: https://ww…

    技术杂谈 2023年6月21日
    085
  • Python中class内置方法__init__与__new__作用与区别探究

    最近尝试了解Django中ORM实现的原理,发现其用到了metaclass(元类)这一技术,进一步又涉及到Python class中有两个特殊内置方法__init__与__new_…

    技术杂谈 2023年6月21日
    085
  • 微服务中的CAP定律

    说到微服务,先给大家提一下CAP分布式应用知识吧,无论你微服务使用的是阿里云开源的Dubbo还是基于Springboot的一整套实现微服务的Springcloud都必须遵循CAP定…

    技术杂谈 2023年6月1日
    085
  • IRP与派遣函数

    https://blog.csdn.net/m0_46125480/article/details/120607653 Original: https://www.cnblogs….

    技术杂谈 2023年5月31日
    0106
  • 搭建Rust开发环境

    介绍 Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。 和Ruby,Python等脚本语言程序不同,Rust 是一种预编译…

    技术杂谈 2023年5月31日
    089
  • 离散化

    3 -1 2 -2 这个数列有 5个逆序对 4 2 3 1 也是五个 我们把最小的-2视作1 第二的-1看做2 … 法一(推荐): 结构体保存数组num 和它在原数组里…

    技术杂谈 2023年6月21日
    0106
  • 61.小尖尖

    dsfsf posted @2022-09-28 08:35 随遇而安== 阅读(6 ) 评论() 编辑 Original: https://www.cnblogs.com/55z…

    技术杂谈 2023年6月21日
    0107
  • Jira Database schema

    https://developer.atlassian.com/server/jira/platform/database-schema/ https://developer.at…

    技术杂谈 2023年5月30日
    099
  • 单张海报点击实例

    可以修改图片和链接,点击链接跳转,适合单张图片模块,店铺收藏、公告等。 <ui> <view> <container> <editProp…

    技术杂谈 2023年6月1日
    098
  • mybatis学习笔记(一)for 概念

    mybaits相关概念 1.1 mybatis简介 mybatis是是一款优秀的基于ORM的半自动轻量级持久层框架,它支持定制化SQL、存储过程以及高级映射。(与另一基于ORM的持…

    技术杂谈 2023年7月11日
    060
  • 8086 汇编

    8086 汇编 1、8086汇编 介绍 2、8086汇编 内存交互 3、8086汇编 CPU 寄存结构 4、8086汇编 Debug 使用 5、8086汇编 段寄存器 6、8089…

    技术杂谈 2023年6月1日
    088
  • 聊聊 React

    都说 React 开发效率高,但效率高在哪呢?来细看看。 用 d3 写一个 List: const renderList = data => { d3.select(&quo…

    技术杂谈 2023年7月11日
    066
  • 特征脸(Eigenface)理论基础-PCA(主成分分析法)

    在之前的博客 人脸识别经典算法一:特征脸方法(Eigenface) 里面介绍了特征脸方法的原理,但是并没有对它用到的理论基础PCA做介绍,现在做补充。请将这两篇博文结合起来阅读。以…

    技术杂谈 2023年5月31日
    089
  • java基础

    java基础知识图解 软件开发 软件开发 软件,即一系列按照特定顺序组织的计算机数据和指令的集合。有系统软件和应用软件之分。 人机交互方式 图形化界面(Graphical User…

    技术杂谈 2023年6月21日
    073
  • 设计模式之策略模式

    策略模式 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个…

    技术杂谈 2023年5月31日
    085
  • Mysql InnoDB多版本并发控制MVCC

    &#x53C2;&#x8003;&#x4E66;&#x7C4D;&#x300A;mysql&#x662F;&#x600E;&…

    技术杂谈 2023年7月25日
    0106
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球