我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注。期待您能关注我,我将把java 9 写成一系列的文章,大概十篇左右。

在Java 9的版本中,对从JDK 7开始支持的try-with-resources语法进行了改进。虽然只是一个小小的改进,我仍希望把他介绍给你,我们一起来每天进步一点点。

一、先说Java7的try-with-resources(Java9改进版在后文)

在Java 7之前没有try-with-resources语法,所有的流的销毁动作,全都需要自己在finally方法中手动的写代码进行关闭。如下文中的代码,将一个字符串写入到一个文件里面。@Test

void testStream() throws IOException {

String fileName = "D:\\data\\test\\testStream.txt";

FileOutputStream fos = new FileOutputStream(fileName); //创建IO管道流

OutputStreamWriter osw = new OutputStreamWriter(fos);

BufferedWriter bw = new BufferedWriter(osw);

try{

bw.write("手写代码进行Stream流的关闭");

bw.flush();

}finally{

bw.close(); //手动关闭IO管道流

osw.close();

fos.close();

}

}

从Java 7版本开始提供了try-with-resources语法,我们只需要把管道流用try()包含起来,在try代码段执行完成之后,IO管道流就会自动的关闭,不需要我们手写代码去关闭,这很简洁!@Test

void testTry() throws IOException {

String fileName = "D:\\data\\test\\testTry.txt";

try(FileOutputStream fos = new FileOutputStream(fileName);

OutputStreamWriter osw = new OutputStreamWriter(fos);

BufferedWriter bw = new BufferedWriter(osw);){

bw.write("IO管道流被自动调用close()方法");

bw.flush();

}

}

二、避免走入误区

很多小伙伴在知道try-with-resources语法之后,容易陷入误区误区一:只有IO管道流才能使用try-with-resources语法,进行自动的资源关闭

误区二:所有带有close()方法的类对象,都会自动的调用close()方法进行资源关闭

误区一把实践范围缩小了,而误区二把实践范围夸大了。那么什么样的资源可以被自动关闭呢?答案就是实现了AutoCloseable或Closeable接口的类可以自动的进行资源关闭。public interface Closeable extends AutoCloseable {

public void close() throws IOException;

}

Closeable接口继承自AutoCloseable接口,二者都包含close()方法。如果你自定义的占用系统资源的类需要进行资源回收,请实现这两个接口之一,并在close()方法中进行资源回收与关闭。这样你自定义的类,也可以使用try-with-resources语法进行资源回收与关闭。

三、try-with-resources在Java 9中的改进

try-with-resources语法在java 9 中进行了改进,try-with-resources语法的try()可以包含变量,多个变量用分号隔开。

这样的改进目的是让语义更加明确,将资源创建代码与尝试资源回收的语法分离。语义一:尝试去执行代码段,如果抛出异常,对异常进行处理

语义二:尝试去自动关闭资源,关闭谁?关闭被try()包含的变量@Test

void testJava9Try() throws IOException {

String fileName = "D:\\data\\test\\testJava9Try.txt";

FileOutputStream fos = new FileOutputStream(fileName);

OutputStreamWriter osw = new OutputStreamWriter(fos);

BufferedWriter bw = new BufferedWriter(osw);

try(bw;osw;fos){ //注意这里:尝试去回收这三个对象对应的资源,和上文中的java 7代码对比

bw.write("Java9-可以被自动调用close()方法");

bw.flush();

}

}

欢迎关注我的博客,里面有很多精品合集

本文转载注明出处(必须带连接,不能只转文字):字母哥博客 - zimug.com

觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。

java8 自动关闭资源_java9系列第二篇-资源自动关闭的语法增强相关推荐

  1. 深入理解javascript函数系列第二篇——函数参数

    前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数.本文是深入理解javascript函数 ...

  2. 前端工程师技能之photoshop巧用系列第二篇——测量篇

    前端工程师使用photoshop进行的大量工作实际上是测量.本文是photoshop巧用系列第二篇--测量篇 测量信息 在网页制作中需要使用photoshop测量的信息分为两类,分别是尺寸信息和颜色信 ...

  3. 焱老师带你学习MYSQL系列 第二篇 (MYSQL 数据结构)

    相关系列链接 焱老师带你学习MYSQL系列 第六篇 (MYSQL是如何实现锁的) 焱老师带你学习MYSQL系列 第五篇 (MYSQL事务隔离级别是如何实现的) 焱老师带你学习MYSQL系列 第四篇 ( ...

  4. 阿里出品移动研发“神器” 阿里移动云系列第二篇|“移”步到位:一站式移动应用研发体系...

    摘要:2017杭州云栖大会阿里移动云峰会专场上,阿里巴巴高级技术专家小木带来一站式应用研发体系方面的演讲.本文主要以互联网的应用背景开始谈起,进而阐述了已拥有APP的企业在APP的生命周期中会遇见哪些 ...

  5. [游戏开发]Python打表工具系列 [第二篇] [打表流程描简述]

    [上一篇链接] [游戏开发]Python打表工具系列 [第一篇][IDE开发环境部署] VSCode Python环境调试_Little丶Seven的博客-CSDN博客 [前言] 第二篇文章是对流程的 ...

  6. 剖析Elasticsearch集群系列第二篇 分布式的三个C、translog和Lucene段

    http://www.infoq.com/cn/articles/anatomy-of-an-elasticsearch-cluster-part02?utm_source=infoq&utm ...

  7. 小白学习Flink系列--第二篇-01(流式数据概念)

    导读 要想彻底理解Flink,就要了解流数据的前世今生,流数据的语义.特点,以及如何处理,以下文章就能很好的解释流数据的概念和模型,对了解Flink有很大的帮助 前言 今天流式数据处理在大数据领域是一 ...

  8. 深入理解脚本化CSS系列第二篇——查询计算样式

    前面的话 元素的渲染结果是多个CSS样式博弈后的最终结果,这也是CSS中的C(cascade)层叠的含义.访问第一篇中的style属性只能获取行间样式,这通常来说,并不是我们想要的结果.本文将详细介绍 ...

  9. “睡服”面试官系列第二篇之promise(建议收藏学习)

    目录 1promise的定义 2基本用法 3. Promise.prototype.then() 4. Promise.prototype.catch() 5. Promise.all() 6. Pr ...

最新文章

  1. 'vt100': unknown terminal type.
  2. yum 安装mariadb
  3. .NET(C#):浅谈程序集清单资源和RESX资源
  4. 内容流量管理的关键技术:多任务保量优化算法实践
  5. Python执行脚本文件将输出既能显示控制台又能重定向到日志
  6. python语言基础与应用慕课课堂测试_中国大学MOOC(慕课)_Python语言基础与应用_题库2020...
  7. 干货!Kaggle座头鲸识别落下帷幕,冠军方案解读
  8. 系统集成项目管理工程师10大管理47个过程域输入输出工具(项目成本管理)
  9. 运用getParameterNames()方法和getParameterValues()方法获取请求参数名称和内容
  10. 用HTml+csss实现优惠券
  11. 怎样采集百家论坛MP3讲座
  12. 组策略怎么禁用计算机管理,如何打开管理员禁用的组策略?
  13. Listener-session的钝化与活化
  14. 4G车载信息终端TBOX车联网数据采集智能网联解决方案
  15. part3_模块五作业
  16. 如何在电脑上查看手机网页源代码?
  17. 你真的理解亲密关系的价值吗?
  18. django项目之官网需求分析实现
  19. `全网最细!! 入门必看Git教程链接:https://gitee.com/all-about-git`
  20. HTML圣诞树代码(动态音效)(我非原创作者,原作者是复旦大学的学长,如有侵权请联系)

热门文章

  1. iOS在app里面跳转到系统的设置界面
  2. Linux系统调用getuid的简单分析
  3. linux挂载时间3秒,linux基础学习(十一) 时间的同步 设备的挂载
  4. php 数组导出csv_php导出百万数据到csv
  5. Java运行时数据区及对象的分配
  6. pythonjava有什么区别_Java与Python的区别对比
  7. mybatis plus当月数据查询_mybatis plus的3种查询方式(小结)
  8. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_03 斗地主案例(单列)_1_斗地主案例的需求分析...
  9. 转, C# 如何在MVC3中取消备用控制器的选择
  10. 高可用之KeepAlived(一):基本概念和配置文件分析