最近看到一篇关于串流的关闭方法通过编译器自动生成关闭串流源码,行之有效
????JAVA的一大特性就是JVM会对内部资源实现自动回收,即自动GC给开发者带来了极大嘚便利。但是JVM对外部资源的引用却无法自动回收例如数据库连接,网络连接以及输入输出IO流等这些连接就需要我们手动去关闭,不然會导致外部资源泄露连接池溢出以及文件被异常占用等。
????传统的手动释放外部资源一般放在一般放在try{}catch(){}finally{}
机制的finally
代码块中因为finally
代碼块中语句是肯定会被执行的,即保证了外部资源最后一定会被释放同时考虑到finally
代码块中也有可能出现异常,finally代码块中也有一个try{}catch(){}
这种寫法是经典的传统释放外部资源方法,显然是非常繁琐的
例如如下读取的文件的io流,我们之前可能会这样写
在try()中可以编写多个文件io流或網络io流让我们看看java编译器是怎么帮我们实现的
借助idea查看编译后的代码
可以看到编译后的代码,java编译器自动替我们加上了关闭流的操作所以跟我们自己关闭流是一样的。try-with-resource
这样优雅的写法还是不错的让代码看起来不那么臃肿。
注意:jdk1.7
以后才可以用