当前位置:网站首页>别再在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
边栏推荐
- Suitable for C / C + + novice learning some projects, do not give me to miss!
- Tencent, which is good at to C, how to take advantage of Tencent's cloud market share in these industries?
- 一文剖析2020年最火十大物联网应用|IoT Analytics 年度重磅报告出炉!
- BCCOIN告诉您:年底最靠谱的投资项目是什么!
- laravel8更新之维护模式改进
- Ali teaches you how to use the Internet of things platform! (Internet disk link attached)
- Improvement of rate limit for laravel8 update
- Research on WLAN direct connection (peer-to-peer connection or P2P) and cross platform research of IOS
- 浅谈OpenGL之DSA
- rabbitmq(一)-基础入门
猜你喜欢

Flink从入门到真香(10、Sink数据输出-Elasticsearch)

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

We made a medical version of the MNIST dataset, and found that the common automl algorithm is not so easy to use

It's worth seeing! EMR elastic low cost offline big data analysis best practice (with network disk link)

Essential for back-end programmers: distributed transaction Basics

Summary of template engine

PMP experience sharing

Or talk No.19 | Facebook Dr. Tian Yuandong: black box optimization of hidden action set based on Monte Carlo tree search

应届生年薪35w+ !倒挂老员工,互联网大厂薪资为何越来越高?

Don't look! Full interpretation of Alibaba cloud's original data lake system! (Internet disk link attached)
随机推荐
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
Hematemesis! Alibaba Android Development Manual! (Internet disk link attached)
你的云服务器可以用来做什么?云服务器有什么用途?
10个常见的软件架构模式
The progress bar written in Python is so wonderful~
C language I blog assignment 03
BCCOIN告诉您:年底最靠谱的投资项目是什么!
AQS解析
谷歌开源能翻译101种语言的AI模型,只比Facebook多一种
在51CTO学院Get到PMP证书
吐血整理!阿里巴巴 Android 开发手册!(附网盘链接)
Where is the new target market? What is the anchored product? |Ten questions 2021 Chinese enterprise service
[Python 1-6] Python tutorial 1 -- number
How to write a resume and project
Flink: from introduction to Zhenxiang (3. Reading data from collection and file)
Python基础语法
Comics: looking for the best time to buy and sell stocks
Flink from introduction to Zhenxiang (7. Sink data output file)
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
原创 | 数据资产确权浅议