Closeable

简介: Closeable java

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

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

try {

fos = new FileOutputStream("test.txt");
dos = new DataOutputStream(fos);
dos.writeUTF("JDK7");
AI 代码解读

} catch (IOException e) {

// error处理
AI 代码解读

} finally {

fos.close();
dos.close();
AI 代码解读

}
问题来了,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);
// 写一些功能
AI 代码解读

} catch (IOException e) {

// error处理
AI 代码解读

} finally {

try {
    fos.close();
    dos.close();
} catch (IOException e) {
    // log the exception
}
AI 代码解读

}

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

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

// 写一些功能
AI 代码解读

} catch(Exception e) {

// error处理
AI 代码解读

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

目录
相关文章
如何构建一套qwen-max智能体拥有媲美通义千问在线接口的能力
智能系统通过任务识别、决策引擎、工具选择和结果整合,自动选择合适的工具和方法,高效处理查询、生成、翻译、图像处理等任务,提供精准的解决方案。系统支持自然语言理解、任务分类、语义解析与意图识别,确保任务的准确执行和反馈。
220 3
探索Flink动态CEP:杭州银行的实战案例
本文由杭州银行大数据工程师唐占峰、欧阳武林撰写,介绍Flink动态CEP的定义、应用场景、技术实现及使用方式。Flink动态CEP是基于Flink的复杂事件处理库,支持在不重启服务的情况下动态更新规则,适应快速变化的业务需求。文章详细阐述了其在反洗钱、反欺诈和实时营销等金融领域的应用,并展示了某金融机构的实际应用案例。通过动态CEP,用户可以实时调整规则,提高系统的灵活性和响应速度,降低维护成本。文中还提供了具体的代码示例和技术细节,帮助读者理解和使用Flink动态CEP。
963 2
探索Flink动态CEP:杭州银行的实战案例
阿里云新手入门:注册账号、实名认证、申请免费云服务器
阿里云新手指南:注册账号(手机号或支付宝快捷注册),完成实名认证(个人/企业)。通过免费服务器获取3个月试用。创建后,设置密码,远程连接,配置安全组规则,部署应用,如建站与环境安装。详询官方教程。
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)(3)
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)
628 0
一文看懂开源图化框架中的循环设计逻辑!
相信大家在日常工作中,已经精通各种循环逻辑的实现。就拿我来说吧,多年的工作经验,已经让我可以熟练的使用 C++,Python,英语等多种语言,循环多次输出“hello word”。不过大家有没有想过一个这样的问题:如何在一个有向无环图(Directed Acyclic Graph,简称dag)中实现循环呢?
884 0
一文看懂开源图化框架中的循环设计逻辑!
远程桌面时连接不上远程计算机是什么问题
有一些其他可能导致远程桌面连接失败的因素,例如远程计算机已关闭、远程计算机上安装的软件与远程桌面发生冲突等。针对这些问题,可以采取相应的解决措施,来查看处理。
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
1549 0
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
执行脚本出现 standard in must be a tty
出现该提示是因为你执行的脚本的时候并不是在没有对应用户的环境变量,应该在脚本中加入su - username,来加载环境变量。
580 0
Namesilo域名解析
简单的3步,就可以让你快速完成Namesilo域名解析设置,修改DNS解析记录。首先你需要登录Namesilo官网,点击My Account进入账户主页,然后点击Domain Manager打开Namesilo域名管理控制台。找到你想要解析的域名,在其右侧点击蓝色小球图标进入域名修改界面,添加和删除你的域名解析记录。
1711 0
Namesilo域名解析
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问