博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Closeable
阅读量:6206 次
发布时间:2019-06-21

本文共 1004 字,大约阅读时间需要 3 分钟。

JDK7之前

JDK7之前的版本在释放资源的时候,使用的try-catch-finally来操作资源。

其中,try代码块中使用获取、修改资源,catch捕捉资源操作异常,finally代码块来释放资源。

try {

fos = new FileOutputStream("test.txt");dos = new DataOutputStream(fos);dos.writeUTF("JDK7");

} catch (IOException e) {

// error处理

} finally {

fos.close();dos.close();

}

问题来了,finally代码块中的fos.close()出现了异常,将会阻止dos.close()的调用,从而导致dos没有正确关闭而保持开放状态。

解决方法是把finally代码块中的两个fos和dos的关闭继续套在一个try-catch-finally代码块中。

FileOutputStream fos = null;

DataOutputStream dos = null;
try {

fos = new FileOutputStream("test.txt")dos = new DataOutputStream(fos);// 写一些功能

} catch (IOException e) {

// error处理

} finally {

try {    fos.close();    dos.close();} catch (IOException e) {    // log the exception}

}

JDK7及之后

JDK7之后有了带资源的try-with-resource代码块,只要实现了AutoCloseable或Closeable接口的类或接口,都可以使用该代码块来实现异常处理和资源关闭异常抛出顺序。

try(FileOutputStream fos = new FileOutputStream("test.txt")){

// 写一些功能

} catch(Exception e) {

// error处理

}

我们可以发现,在新版本的资源try-catch中,我们已经不需要对资源进行显示的释放,而且所有需要被关闭的资源都能被关闭。
需要注意的是,资源的close方法的调用顺序与它们的创建顺序是相反的。

转载地址:http://fuhca.baihongyu.com/

你可能感兴趣的文章
阿里与珠海横琴新区达成战略合作,阿里云助力打造横琴智能岛
查看>>
CVE-2018-1000136:Electron nodeIntegration绕过漏洞
查看>>
订阅Jenkins的邮件列表,获取最新的信息
查看>>
PHP笔记——java程序员看懂PHP程序
查看>>
Facebook哭晕在厕所,调查显示用VR体验社交的用户仅为19%
查看>>
Swift中的闭包例子
查看>>
区块链101:区块链的应用和用例是什么?
查看>>
[连载]《C#通讯(串口和网络)框架的设计与实现》- 13.中英文版本切换设计
查看>>
交通银行信息技术管理部副总经理张漫丽:交通银行“大数据+人工智能”应用研究...
查看>>
搭建MSSM框架(Maven+Spring+Spring MVC+MyBatis)
查看>>
马约拉纳费米子:推动量子计算的“天使粒子”
查看>>
瑞立视:厚积薄发且具有“工匠精神”的中国品牌
查看>>
IntelliJ IDEA代码分屏显示
查看>>
#region(C# 参考)
查看>>
IBM推全球首个5纳米芯片:计划2020年量产
查看>>
git与svn的区别 ?Git 与 SVN那个更好?
查看>>
嵌入式开发-lesson9-顺序结构程序设计
查看>>
使用ActionTrail Python SDK
查看>>
数据显示,中国近一半的独角兽企业由“BATJ”四巨头投资
查看>>
Hyper-V 替换 vmwp
查看>>