当前位置:网站首页>别再在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
边栏推荐
- 【Python 1-6】Python教程之——数字
- Tidb performance competition 11.02-11.06
- Introduction to mongodb foundation of distributed document storage database
- nat转换的ip跟端口ip不相同的解决方法
- Written interview topic: looking for the lost pig
- 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
- “他,程序猿,35岁,被劝退”:不要只懂代码,会说话,胜过10倍默默努力
- AQS解析
- Suitable for C / C + + novice learning some projects, do not give me to miss!
- Xamarin deploys IOS from scratch Walterlv.CloudKeyboard application
猜你喜欢
Python基础语法
谷歌开源能翻译101种语言的AI模型,只比Facebook多一种
[Python 1-6] Python tutorial 1 -- number
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
Top 5 Chinese cloud manufacturers in 2018: Alibaba cloud, Tencent cloud, AWS, telecom, Unicom
This time Kwai tiktok is faster than shaking.
We made a medical version of the MNIST dataset, and found that the common automl algorithm is not so easy to use
Workers, workers soul, draw lifelong members, become a person!
What is the database paradigm
Enabling education innovation and reconstruction with science and technology Huawei implements education informatization
随机推荐
How to solve the difference between NAT IP and port IP
BCCOIN告诉您:年底最靠谱的投资项目是什么!
Xamarin deploys IOS from scratch Walterlv.CloudKeyboard application
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
Q & A and book giving activities of harbor project experts
python基础教程python opencv pytesseract 验证码识别的实现
Top 5 Chinese cloud manufacturers in 2018: Alibaba cloud, Tencent cloud, AWS, telecom, Unicom
这次,快手终于比抖音'快'了!
阿里云加速增长,进一步巩固领先优势
Workers, workers soul, draw lifelong members, become a person!
新型存算一体芯片诞生,利好人工智能应用~
Ali tear off the e-commerce label
AQS解析
Flink从入门到真香(6、Flink实现UDF函数-实现更细粒度的控制流)
Flink from introduction to Zhenxiang (7. Sink data output file)
10 common software architecture patterns
DeepMind 最新论文解读:首次提出离散概率树中的因果推理算法
优化if-else代码的八种方案
On monotonous stack
浅谈OpenGL之DSA