java try-with-resource语句使用

定义

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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
 

猜你喜欢

转载自www.cnblogs.com/GarfieldEr007/p/10211542.html