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)

大家都在看

  • typora 标题自动加编号

    网上看了挺多其他复制粘贴的方法,但是缺点都是第一级 h1 ,都算进去了 按照规范的 markdown 规范,一个 md 文件中只能出现一个 h1,就是标题 所以最大的编号应该就是 …

    技术杂谈 2023年7月11日
    055
  • 【Python 第1课】安装

    在Windows系统上安装Python的方法还算简单,比平常装个软件稍稍麻烦一点。进入Python的官方下载页面 Python.org/download,你会看到一堆下载链接。我们…

    技术杂谈 2023年7月24日
    059
  • mysql @rownum := @rownum+1 方式获取行号

    MySQL: mysql中没有获取行号的函数,因此需要通过一些自定义语句来进行获取。通常做法是,通过定义用户变量@rownum来保存表中的数据。通过赋值语句@rownum:=@ro…

    技术杂谈 2023年7月25日
    055
  • Vue 前端权限控制的优化改进版

    1、前言 之前《Vue前端访问控制方案 》一文中提出,使用class=”permissions”结合元素id来标识权限控制相关的dom元素,并通过公共方法c…

    技术杂谈 2023年6月21日
    0103
  • 一张动图,让你明白时域和频域的关系

    看明白了这张图,就可以了解为什么既要做时域分析也要做频域分析了吧。 简单总结下,时域和频域的关系如下: 时域是信号在时间轴随时间变化的总体概括。 频域是把时域波形的表达式做傅立叶等…

    技术杂谈 2023年5月31日
    065
  • 测试开发角色定位

    知乎上看到一个很有意思的话题: 测试开发是代表 “懂测试的开发” 还是”懂开发的测试”? 这是个很有意思的话题: 我一开始画了这么一…

    技术杂谈 2023年5月31日
    056
  • Love2D游戏引擎制作贪吃蛇游戏

    代码地址如下:http://www.demodashi.com/demo/15051.html Love2D游戏引擎制作贪吃蛇游戏 内附有linux下的makefile,windo…

    技术杂谈 2023年5月31日
    0110
  • 使用vscode对threejs的本地调试

    始终坚信阅读和调试结合的方式,才是学习开源的高效方法 一、老版本调试 遥想当年的threejs(使用版本为r75)还没有CommonJS,对于我这个小白可以拿起大刀大杀四方&#82…

    技术杂谈 2023年7月23日
    093
  • Linux系统创建可执行文件软链接

    由于创建软链接这个事情,在算法开发的日常中使用到的并不是很多,因此本文也是做一个简单的回顾。这里我们使用的案例是通过TMalign这个蛋白质打分文件,在编译好可执行文件之后,可以使…

    技术杂谈 2023年7月24日
    068
  • 什么?Android上面跑Linux?

    前言 众所周知,现在程序员因为工作、个人兴趣等对各种系统的需求越来越大,部分人电脑做的还是双系统。其中,比较常见的有各种模拟器、虚拟机在windows上面跑Android、Linu…

    技术杂谈 2023年7月11日
    066
  • 《大画汽车:图解汽车奥秘》—— 读书笔记

    ​ —— 图片来自绿洲·AE86 —— 本书是看过最浅显易懂的汽车书了,从汽车发展的历史,讲到发动机、变速箱等重要组件,从汽车行驶到安全,最后介绍了汽车的设计与制造流程,整体对汽车…

    技术杂谈 2023年5月30日
    091
  • CMU15-445 数据库导论 Storage01

    CMU15-445 01 Storage 1. 参考资料: [1] CMU15-445:Database Systems [Andy Pavlo] https://15445.co…

    技术杂谈 2023年6月21日
    080
  • 手撕快速排序(含图解和两种实现代码含改进)

    摘要 快速排序其实也是分而治之的思想 快速排序是递归的 首先找一个基准点,把比基准点小的数字都放到它的左边,比它大的数字都放在它的右边,一趟下来基准点的位置找到了,且它左边的数字小…

    技术杂谈 2023年6月21日
    082
  • 数据处理不等式:Data Processing Inequality

    我是在差分隐私下看到的,新解决方案的可用性肯定小于原有解决方案的可用性,也就是说信息的后续处理只会降低所拥有的信息量。 那么如果这么说的话为什么还要做特征工程呢,这是因为该不等式有…

    技术杂谈 2023年5月31日
    063
  • Vue基础知识汇总

    2020年初的时候突击将Vue学习了一下,因为有不错的HTML、CSS、JS 基础,以及微信小程序的编程知识,Vue学起来是真的快·,三下五除二,将Vue官网的教程文章搞完了,并完…

    技术杂谈 2023年7月11日
    066
  • 《EPSANet: An Efficient Pyramid Squeeze Attention Block on Convolutional Neural Network》论文笔记

    然而,上述方法仍然存在两个重要和具有挑战性的问题。第一个是如何高效地捕捉和利用不同尺度特征图的空间信息,丰富特征空间。第二个是通道或空间注意只能有效捕获局部信息,而不能建立远程通道…

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