您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页java try-with-resource语句使用

java try-with-resource语句使用

来源:化拓教育网

定义

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

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务