定义

JDK7之后,Java多了个新的语法:try-with-resources语句,
可以理解为是一个声明一个或多个资源的 try语句(用分号隔开),
一个资源作为一个对象,并且这个资源必须要在执行完关闭的,
try-with-resources语句确保在语句执行完毕后,每个资源都被自动关闭 。
任何实现了** java.lang.AutoCloseable**的对象, 包括所有实现了 java.io.Closeable 的对象
, 都可以用作一个资源。

我们根据定义来自己实现一个玩玩:

public class MyAutoClosable implements AutoCloseable { public void doIt() { System.out.println("MyAutoClosable doing it!"); } @Override public void close() throws Exception { System.out.println("MyAutoClosable closed!"); } public static void main(String[] args) { try(MyAutoClosable myAutoClosable = new MyAutoClosable()){ myAutoClosable.doIt(); } catch (Exception e) { e.printStackTrace(); } } } 
输出.png

发现close方法被自动执行了,这个的好处在于,我们又可以变懒了,不用再去关心连接调用完了是否关闭,文件读写完了是否关闭,专心的实现业务即可。

我们根据这个特性,来试下文件读写
先试试传统写法

public void readFile() throws FileNotFoundException { FileReader fr = null; BufferedReader br = null; try{ fr = new FileReader("d:/input.txt"); br = new BufferedReader(fr); String s = ""; while((s = br.readLine()) != null){ System.out.println(s); } } catch (IOException e) { e.printStackTrace(); }finally { try { br.close(); fr.close(); } catch (IOException e) { e.printStackTrace(); } } } 

需要在最后finally中关闭读文件流。

我们再试试try with resource写法

public void readFile() throws FileNotFoundException { try( FileReader fr = new FileReader("d:/input.txt"); BufferedReader br = new BufferedReader(fr) ){ String s = ""; while((s = br.readLine()) != null){ System.out.println(s); } } catch (IOException e) { e.printStackTrace(); } } 

代码也整洁了一些

通过查看源码可以发现

  • public class FileReader extends InputStreamReader
  • public class InputStreamReader extends Reader
  • public abstract class Reader implements Readable, Closeable

  • public class BufferedReader extends Reader
  • public abstract class Reader implements Readable, Closeable

发现FileReader和BufferedReader最终都实现了Closeable接口,所以根据try with resource 定义,他们都是可以自动关闭的。

作者:程序鱼
链接:https://www.jianshu.com/p/258c5ce1a2bd
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://www.cnblogs.com/GarfieldEr007/p/10211542.html

java try-with-resource语句使用相关推荐

  1. java语言中if语句的基本语法_java中if语句有哪些形式和用法

    形式一:if语句 if语句是指如果满足某种条件,就进行某种处理.例如,小明妈妈跟小明说"如果你考试得了100分,星期日就带你去游乐场玩".这句话可以通过下面的一段伪代码来描述. 如 ...

  2. java中 如何用if_不在Java中使用if语句

    这是一个非常奇怪且非常具体的问题. 最终我正在尝试编写一个程序转换,它接受java源代码,并将其转换为不使用它(除其他外) >阵列 >循环 >用户定义的方法 >如果声明 这是我 ...

  3. java预编译啥意思_java预编译 java jdbc 预编译语句和普通语句的区别

    java中什么是预编译precompile?总有一天你恍然大悟,父母是你花心思,花时间最少,却最爱你的人. 什么是预编译?起什么作用的? . 在java中如何实现预编译?祝你幸福!这句话真俗.小编会祝 ...

  4. JAVA基础——Switch条件语句

    JAVA基础--switch 条件语句 switch语句结构: switch(表达式){case值1:语句体1:break:case值2:语句体2:break:case值3:语句体3:break:.. ...

  5. java中的foreach语句

    在java中,foreach语句是for语句的特殊简化版本,在遍历数组等方面为程序员提供了很大的方便,语法格式如下: for(元素变量 x : 遍历对象 obj) { 引用了x的java语句: } f ...

  6. java在td中怎么用if_不在Java中使用if语句

    这是一个非常奇怪且非常具体的问题. 最终我正在尝试编写一个程序转换,它接受java源代码,并将其转换为不使用它(除其他外) >阵列 >循环 >用户定义的方法 >如果声明 这是我 ...

  7. java中的sql语句书写_Java中sql语句之通配符*

    在java中执行SQL语句要特别注意通配符的问题,否则是不会成功的: 在ACCESS中的通配符是* 例:select  *  from student  where  name like  '张*' ...

  8. java用while循环语句输出1-100内的奇数和

    java用while循环语句输出1-100内的奇数和 /*** 用while语句,输出0-100所有奇数和*/ public class Test04 {public static void main ...

  9. java 下面的while语句退出时_java 下面的while语句退出时

    java 下面的while语句退出时 [2021-02-02 07:01:21]  简介: php中while循环语句的使用方法是:while循环语句在指定条件为true时执行代码块.while循环语 ...

  10. java oracle分页查询语句_oracle分页查询语句,java得到分页查询语句的方法

    oracle分页查询语句 select * from ( select a.*, rownum rn from (select * from table_name) a where rownum &l ...

最新文章

  1. 医疗领域中的AI/ML机会前景
  2. 虚拟主机1服务器,虚拟主机1服务器
  3. 通过反射获取DLL的类实现加载窗体
  4. 惠普电脑怎么截屏_省钱上京东双十一买笔记本电脑怎么买更优惠更划算更省钱最新攻略!联想戴尔华硕炫龙荣ROG神州宏碁惠普...
  5. c 函数多次声明_【C语言】- static和extern关键字 - 对函数的作用!
  6. 粘滞位 File文件内容
  7. ADS1675调试无时钟输出
  8. ❤️Java面试高频《注解与反射》(建议收藏)❤️
  9. 再学点分治——动态点分治
  10. 企业信息化建设的总体规划
  11. matlab:xlsread
  12. 2020最新的黑马Java分享,包含课件,资料,项目,教程全部免费分享,需要的赶紧去收藏吧
  13. HTML+CSS+JS新年倒计时(实时更新)
  14. 华为机试真题 C++ 实现【最短木板长度】【100%通过率】【2022.11 Q4 新题】
  15. Word中使用Bibtex4Word快速插入规范的参考文献
  16. 16 - 12 - 06 克鲁斯卡尔(Kruskal)算法详解
  17. 百度云生态分享日 | AI技术实践与应用沙龙活动成功举办
  18. html svg文件 热区,前端常识 【svg+热区】处理平面图
  19. 利用G25祖源计算器坐标画PCA散点图
  20. Mac系统打不开appstore怎么办

热门文章

  1. Android自己定义组件系列【6】——进阶实践(3)
  2. vs转eclipse之工具快速上手篇
  3. ELK日志服务使用-kafka传输日志(bbotte.com)
  4. linux nginx svn 安装
  5. HTML行间距的设置方法
  6. PHP中date()函数详细参数
  7. 漫谈天际网的用户体验
  8. [xsy2880]取石子游戏
  9. Base:一种 Acid 的替代方案
  10. ava RMI 框架(远程方法调用)