Closeable

简介: Closeable java

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方法的调用顺序与它们的创建顺序是相反的。

目录
相关文章
|
人工智能 自然语言处理 搜索推荐
如何构建一套qwen-max智能体拥有媲美通义千问在线接口的能力
智能系统通过任务识别、决策引擎、工具选择和结果整合,自动选择合适的工具和方法,高效处理查询、生成、翻译、图像处理等任务,提供精准的解决方案。系统支持自然语言理解、任务分类、语义解析与意图识别,确保任务的准确执行和反馈。
378 3
|
安全 API Android开发
Android 15: 迈向64位时代的重大更新与全新体验
2024年,Google发布Android 15,迈向64位计算新时代。新系统淘汰32位应用,引入多项性能优化与新特性,如矢量emoji、预测性返回动画等,并预计随Pixel 9系列一同发布。开发者需更新应用确保兼容性,并利用新功能提升用户体验。
3714 15
Android 15: 迈向64位时代的重大更新与全新体验
|
消息中间件 JSON 数据库
探索Flink动态CEP:杭州银行的实战案例
本文由杭州银行大数据工程师唐占峰、欧阳武林撰写,介绍Flink动态CEP的定义、应用场景、技术实现及使用方式。Flink动态CEP是基于Flink的复杂事件处理库,支持在不重启服务的情况下动态更新规则,适应快速变化的业务需求。文章详细阐述了其在反洗钱、反欺诈和实时营销等金融领域的应用,并展示了某金融机构的实际应用案例。通过动态CEP,用户可以实时调整规则,提高系统的灵活性和响应速度,降低维护成本。文中还提供了具体的代码示例和技术细节,帮助读者理解和使用Flink动态CEP。
1598 2
探索Flink动态CEP:杭州银行的实战案例
|
人工智能 Devops 数据挖掘
IT项目经理的职责、能力和工具:让项目管理更高效
3分钟了解IT项目经理的主要职责和需要具备哪些专业技能。
553 5
IT项目经理的职责、能力和工具:让项目管理更高效
|
小程序 数据安全/隐私保护
阿里云新手入门:注册账号、实名认证、申请免费云服务器
阿里云新手指南:注册账号(手机号或支付宝快捷注册),完成实名认证(个人/企业)。通过免费服务器获取3个月试用。创建后,设置密码,远程连接,配置安全组规则,部署应用,如建站与环境安装。详询官方教程。
|
消息中间件 存储 运维
RabbitMQ-消息消费时的可靠性保障
将这些实践融入到消息消费的处理逻辑中,可以很大程度上保障RabbitMQ中消息消费的可靠性,确保消息系统的稳定性和数据的一致性。这些措施的实施,需要在系统的设计和开发阶段充分考虑,以及在后续的维护过程中不断的调整和完善。
308 0
|
人工智能 大数据 程序员
一文看懂开源图化框架中的循环设计逻辑!
相信大家在日常工作中,已经精通各种循环逻辑的实现。就拿我来说吧,多年的工作经验,已经让我可以熟练的使用 C++,Python,英语等多种语言,循环多次输出“hello word”。不过大家有没有想过一个这样的问题:如何在一个有向无环图(Directed Acyclic Graph,简称dag)中实现循环呢?
1101 0
一文看懂开源图化框架中的循环设计逻辑!
|
缓存 网络协议 开发者
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
2026 0
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)(3)
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)
1016 0
|
SQL 监控 数据可视化
Google Analytics
【6月更文挑战第8天】Google Analytics
599 4