当前位置:网站首页>别再在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
边栏推荐
- laravel8更新之维护模式改进
- wanxin finance
- Flink: from introduction to Zhenxiang (6. Flink implements UDF function - realizes more fine-grained control flow)
- 喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水
- Returning to the third place in the world, what did Xiaomi do right?
- Harbor项目高手问答及赠书活动
- Enabling education innovation and reconstruction with science and technology Huawei implements education informatization
- Written interview topic: looking for the lost pig
- 为什么 Schnorr 签名被誉为比特币 Segwit 后的最大技术更新
- Xamarin deploys IOS from scratch Walterlv.CloudKeyboard application
猜你喜欢
这次,快手终于比抖音'快'了!
Top 5 Chinese cloud manufacturers in 2018: Alibaba cloud, Tencent cloud, AWS, telecom, Unicom
华为云重大变革:Cloud&AI 升至华为第四大 BG ,火力全开
用科技赋能教育创新与重构 华为将教育信息化落到实处
Top 5 Chinese cloud manufacturers in 2018: Alibaba cloud, Tencent cloud, AWS, telecom, Unicom
Android Basics - check box
This time Kwai tiktok is faster than shaking.
模板引擎的整理归纳
rabbitmq(一)-基础入门
Adobe Lightroom / LR 2021 software installation package (with installation tutorial)
随机推荐
It's worth seeing! EMR elastic low cost offline big data analysis best practice (with network disk link)
我用 Python 找出了删除我微信的所有人并将他们自动化删除了
Android Basics - check box
BCCOIN告诉您:年底最靠谱的投资项目是什么!
Stm32uberide download and install - GPIO basic configuration operation - debug (based on CMSIS DAP debug)
Flink from introduction to Zhenxiang (10. Sink data output elasticsearch)
Flink: from introduction to Zhenxiang (6. Flink implements UDF function - realizes more fine-grained control flow)
Top 5 Chinese cloud manufacturers in 2018: Alibaba cloud, Tencent cloud, AWS, telecom, Unicom
On the software of express delivery cabinet and deposit cabinet under Windows
谷歌开源能翻译101种语言的AI模型,只比Facebook多一种
[Python 1-6] Python tutorial 1 -- number
C language I blog assignment 03
Suitable for C / C + + novice learning some projects, do not give me to miss!
一文读懂机器学习“数据中毒”
wanxin finance
Python基础语法
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
Flink from introduction to Zhenxiang (7. Sink data output file)
在51CTO学院Get到PMP证书
你的云服务器可以用来做什么?云服务器有什么用途?