当前位置:网站首页>别再在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
边栏推荐
- Flink从入门到真香(7、Sink数据输出-文件)
- Essential for back-end programmers: distributed transaction Basics
- Written interview topic: looking for the lost pig
- This paper analyzes the top ten Internet of things applications in 2020!
- This time Kwai tiktok is faster than shaking.
- How to solve the difference between NAT IP and port IP
- 2035我们将建成这样的国家
- AQS解析
- Improvement of rate limit for laravel8 update
- svg究竟是什么?
猜你喜欢
Flink从入门到真香(7、Sink数据输出-文件)
在51CTO学院Get到PMP证书
分布式文档存储数据库之MongoDB基础入门
Get PMP certificate at 51CTO College
Hematemesis! Alibaba Android Development Manual! (Internet disk link attached)
小米、OPPO在欧洲市场继续飙涨,小米更是直逼苹果
On the software of express delivery cabinet and deposit cabinet under Windows
What is the database paradigm
C language I blog assignment 03
This paper analyzes the top ten Internet of things applications in 2020!
随机推荐
Rabbitmq (1) - basic introduction
区块链周报:数字货币发展写入十四五规划;拜登邀请MIT数字货币计划高级顾问加入总统过渡团队;委内瑞拉推出国营加密交易所
How to cooperate with people in software development? |Daily anecdotes
华为云重大变革:Cloud&AI 升至华为第四大 BG ,火力全开
最全!阿里巴巴经济体云原生实践!(附网盘链接)
Essential for back-end programmers: distributed transaction Basics
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
python基础教程python opencv pytesseract 验证码识别的实现
Google's AI model, which can translate 101 languages, is only one more than Facebook
值得一看!EMR弹性低成本离线大数据分析最佳实践(附网盘链接)
浅谈单调栈
阿里撕下电商标签
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
金融领域首个开源中文BERT预训练模型,熵简科技推出FinBERT 1.0
Drink soda, a bottle of soda water 1 yuan, two empty bottles can change a bottle of soda, give 20 yuan, how much soda can you
Get PMP certificate at 51CTO College
laravel8更新之维护模式改进
Hematemesis! Alibaba Android Development Manual! (Internet disk link attached)
阿里教你深入浅出玩转物联网平台!(附网盘链接)
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...