当前位置:网站首页>别再在finally里面释放资源了,解锁个新姿势!
别再在finally里面释放资源了,解锁个新姿势!
2020-11-08 13:47:00 【osc_zq2o0u6t】
版权说明: 本文由博主原创,转载请注明出处。
原文地址: https://blog.csdn.net/qq_38688267/article/details/109511716
在我们编码过程中,不可避免的会用到于文件操作 IO 流、数据库连接等开销比较大的资源,用完之后需要通过 close 方法将其关闭,否则资源一直处于打开状态,可能会导致内存泄露等问题。
拿文件操作流举例,我们在使用时要try catch,用完了在finally中关闭,而关闭的时候还需要再try catch,可以说是非常麻烦了!代码如下:
/**传统写法**/
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(""));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
// DO something
} finally {
if(br != null) {
try {
br.close();
} catch (IOException e) {
// DO something
}
}
}
而我们的新姿势是使用JDK1.7中的try-with-resources语法,直接上代码:
/**使用语法糖**/
try (BufferedReader br1 = new BufferedReader(new FileReader(""))) {
String line;
while ((line = br1.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
// DO something
}
代码是不是瞬间清爽了很多?赶紧用起来吧~
我们顺便再来刨根究底一下吧,看下他编译之后的样子:
try {
BufferedReader br1 = new BufferedReader(new FileReader(""));
Throwable var7 = null;
try {
String line;
try {
while((line = br1.readLine()) != null) {
System.out.println(line);
}
} catch (Throwable var32) {
var7 = var32;
throw var32;
}
} finally {
if (br1 != null) {
if (var7 != null) {
try {
br1.close();
} catch (Throwable var31) {
var7.addSuppressed(var31);
}
} else {
br1.close();
}
}
}
} catch (IOException var34) {
}
其实背后的原理也很简单,让编译器都帮我们做了关闭资源的工作而已。所以,再次印证了,语法糖的作用就是方便程序员的使用,最终还是要转成编译器认识的语言。
希望本文对大家有所帮助或启发。码字不易,觉得写的不错的可以点赞支持一下哦~
版权声明
本文为[osc_zq2o0u6t]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4360121/blog/4708185
边栏推荐
- How to cooperate with people in software development? |Daily anecdotes
- 我用 Python 找出了删除我微信的所有人并将他们自动化删除了
- 2035我们将建成这样的国家
- Ubuntu20.04下访问FTP服务器乱码问题+上传文件
- 2035 we will build such a country
- 应届生年薪35w+ !倒挂老员工,互联网大厂薪资为何越来越高?
- “他,程序猿,35岁,被劝退”:不要只懂代码,会说话,胜过10倍默默努力
- 来自朋友最近阿里、腾讯、美团等P7级Python开发岗位面试题
- On DSA of OpenGL
- 2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
猜你喜欢

我们做了一个医疗版MNIST数据集,发现常见AutoML算法没那么好用

Flink: from introduction to Zhenxiang (6. Flink implements UDF function - realizes more fine-grained control flow)

What can your cloud server do? What is the purpose of cloud server?

Flink from introduction to Zhenxiang (10. Sink data output elasticsearch)
![[Python 1-6] Python tutorial 1 -- number](/img/3b/00bc81122d330c9d59909994e61027.jpg)
[Python 1-6] Python tutorial 1 -- number

2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...

谷歌开源能翻译101种语言的AI模型,只比Facebook多一种

PMP考试通过心得分享

供货紧张!苹果被曝 iPhone 12 电源芯片产能不足

Top 5 Chinese cloud manufacturers in 2018: Alibaba cloud, Tencent cloud, AWS, telecom, Unicom
随机推荐
打工人,打工魂,抽终身会员,成为人上人!
laravel8更新之速率限制改进
这次,快手终于比抖音'快'了!
Share the experience of passing the PMP examination
软件开发中如何与人协作? | 每日趣闻
Service architecture and transformation optimization process of e-commerce trading platform in mogujie (including ppt)
Alibaba cloud accelerates its growth and further consolidates its leading edge
Blockchain weekly: the development of digital currency is written into the 14th five year plan; Biden invited senior adviser of MIT digital currency program to join the presidential transition team; V
Understanding design patterns
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
Enabling education innovation and reconstruction with science and technology Huawei implements education informatization
适合c/c++新手学习的一些项目,别给我错过了!
STM32CubeIDE下载安装-GPIO基本配置操作-Debug调试(基于CMSIS DAP Debug)
Improvement of rate limit for laravel8 update
OR Talk NO.19 | Facebook田渊栋博士:基于蒙特卡洛树搜索的隐动作集黑盒优化 - 知乎
Tencent, which is good at to C, how to take advantage of Tencent's cloud market share in these industries?
Introduction to mongodb foundation of distributed document storage database
谷歌开源能翻译101种语言的AI模型,只比Facebook多一种
On DSA of OpenGL
[Python 1-6] Python tutorial 1 -- number