博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中资源关闭的处理方式
阅读量:6007 次
发布时间:2019-06-20

本文共 1288 字,大约阅读时间需要 4 分钟。

hot3.png

本文就关于IO资源的处理问题,提出三种方案。

close()放在try块中 close()放在finally块中 使用try-with-resource语句 close()放在try块中

//close() is in try clausetry {    PrintWriter out = new PrintWriter(            new BufferedWriter(            new FileWriter("out.txt", true)));    out.println("the text");    out.close();} catch (IOException e) {    e.printStackTrace();}

这种方式容易造成IO资源的泄露,因为对于IO资源来说不管操作的结果如何都必须关闭。

close()放在finally块中

//close() is in finally clausePrintWriter out = null;try {    out = new PrintWriter(        new BufferedWriter(        new FileWriter("out.txt", true)));    out.println("the text");} catch (IOException e) {    e.printStackTrace();} finally {    if (out != null) {        out.close();    }

这种方式在JDK1.7之前,推荐使用这种方式,但是,这种方式还是有问题,因为,在try块和finally块中可能都会发生Exception。

使用try-with-resource语句

//try-with-resource statementtry (PrintWriter out2 = new PrintWriter(            new BufferedWriter(            new FileWriter("out.txt", true)))) {    out2.println("the text");} catch (IOException e) {    e.printStackTrace();}

这种方式可能是最好的,Java官方推荐使用这种方式,但是,使用的前提是你的jdk版本在1.7以上。

总结

因为不管什么情况下(异常或者非异常)资源都必须关闭,在jdk1.6之前,应该把close()放在finally块中,以确保资源的正确释放。

如果使用jdk1.7以上的版本,推荐使用try-with-resources语句。

原文链接:should-close-be-put-in-finally-block-or-not 翻译:crane-yuan

转载于:https://my.oschina.net/liuyuanyuangogo/blog/849297

你可能感兴趣的文章
揭开react hook神秘面纱
查看>>
观察者模式与它在源码中的运用
查看>>
【Geek招募】
查看>>
JS浅谈Number数值转换
查看>>
让信息流广告成为ROI狙击手的终极全策略!
查看>>
vue感悟:解决编译过后在本地直接打开,找不到css或者背景图片的问题
查看>>
flex-basis与width在布局中的作用
查看>>
前端面试手记
查看>>
走进前端的过程--方向式学习
查看>>
ES6学习笔记一(let和const)
查看>>
iOS多线程的那些事儿
查看>>
老马的春天:SDWebImage源码详细解读系列
查看>>
【分享实录】BANCOR算法详解及代码实现
查看>>
vue基础(1)--instance对象
查看>>
月薪8k 和 月薪38K的程序员差距在哪里?
查看>>
spring cloud微服务分布式云架构-config配置自动刷新
查看>>
iOS不添加图片的按钮点击效果 UIButton添加点击效果
查看>>
网页中的八边形,利用css
查看>>
使用WireMock 伪造 Rest 服务
查看>>
kotlin基本语法(自学基础--备忘I)
查看>>