try()catch{}自动释放资源

简介: try()catch{}自动释放资源

我们在学习jdbc时,通过Connection,SqlSession ,inputStream等对象完成对数据库的操作,使用完资源后必须在finally中调一堆.close方法将资源关闭。那么有没有更好的方法呢?

//伪代码
SqlSession sqlSession = sqlSessionFactory.openSession()
try  {
    //......
}finally{
 sqlSession.close();
}

下面我就为大家介绍一种简单快捷的自动释放资源方法。


从jdk1.7开始Java 7增强了try语句的功能。它允许在try关键字后跟一对圆括号,圆括号可以声明,初始化一个或多个资源,此处的资源指得是那些必须在程序结束时必须关闭的资源(比如数据库连接,网络连接等),try语句在该语句结束时自动关闭这些资源。这种称为try-with-resources语句。

//伪代码
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
    //......
}

像这样的话,执行完sqlsession会自动关闭,不用我们在finally中关闭,那么为什么这样可以自动关闭资源呢?是不是所有的资源都可以这样关闭呢?


我们查看源码后发现凡是实现了Closeable或AutoCloseable接口的类,在try()里声明该类实例的时候,在try结束后,close方法都会被调用比如Sqlsession它就是extends Closeable, Closeable extends AutoCloseable除了Sqlsession之外几乎所有的资源都可以用这种方式实现自动关闭资源,比如OutputStream,BufferedReader,PrintStream,InputStream等,都可以。据说到目前为止,只有JavaMail Transport对象不能利用这种方式实现自动关闭。


注意:如果try()里面有两个资源,用逗号分开,资源的close方法的调用顺序与它们的创建顺序相反。带有资源的try语句可以像一般的try语句一样具有catch和finally块。在try-with-resources语句中,任何catch或finally块都是在声明的资源被关闭后才会执行的。


总结


  1. 凡是实现了Closeable或AutoCloseable接口的类,在try()里声明该类实例的时候,在try结束后,close方法都会被调用.
  2. try结束后自动调用的close方法,这个动作会早于finally里调用的方法。
  3. 不管是否出现异常(int i=1/0会抛出异常),try()里的实例都会被调用close方法。
  4. 越晚声明的对象,会越早被close掉。



相关文章
|
Java
Java实现图片格式转换(通过ImageIO)
Java实现图片格式转换(通过ImageIO)
1639 0
|
4月前
|
数据采集 监控
案例分析合约量化跟单在实战中的成败
本文聚焦合约量化跟单实战,通过拆解高波动行情下的典型案例,构建交易员、策略方、资金方等多角色需求画像,剖析信号滞后、滑点成本、风控约束等核心痛点。以场景化要素为锚点,提炼可溯源的决策链条与参数模板,建立从问题识别到验证优化的五步论证路径,实现策略从回测到实盘的高效转化,助力各类投资者提升跟单落地可行性与风险控制能力。(238字)
|
7月前
|
监控 Linux 网络安全
Linux命令大全:从入门到精通
日常使用的linux命令整理
1380 13
|
安全 搜索推荐 测试技术
陪玩系统安全问题 陪玩系统用户体验 陪玩系统功能 陪玩搜索功能优化 陪玩系统开发教程
陪玩系统的安全问题至关重要,涉及用户数据保护、支付安全和平台稳定性。关键措施包括多因子认证、支付接口加密、防止恶意脚本注入、DDoS攻击防护及数据加密。同时,优化用户体验也非常重要,如简化操作流程、提供互动功能和个性化服务。核心功能涵盖用户注册、陪玩师资料展示、智能匹配、实时通讯、支付结算等。开发时需综合考虑需求分析、技术选型、界面设计和功能实现,并进行充分测试与优化,确保系统稳定性和安全性。
902 0
|
开发框架 前端开发 API
C#/.NET/.NET Core优秀项目和框架2024年9月简报
C#/.NET/.NET Core优秀项目和框架2024年9月简报
349 1
|
机器学习/深度学习 搜索推荐 语音技术
进阶教程:优化语音克隆效果与提升TTS自然度
【10月更文挑战第20天】语音克隆技术和基于文本到语音(Text-to-Speech, TTS)系统的应用已经在诸多领域展现出了巨大的潜力,从智能助手到个性化客服,再到教育和娱乐产业。作为一名在语音技术领域有着多年实践经验的研发人员,我希望通过本文分享一些我个人在优化语音克隆效果与提升TTS自然度方面的经验和见解,帮助那些已经具备了一定基础并希望进一步提升自身技能的同行们。
884 0
|
负载均衡 算法 应用服务中间件
nginx自定义负载均衡及根据cpu运行自定义负载均衡
nginx自定义负载均衡及根据cpu运行自定义负载均衡
420 1
|
JSON 关系型数据库 MySQL
MySQL 5.x和8.0区别
性能:8.0的速度要比5.7快2倍,8.0在以下方面带来了更好的性能:读/写负载、IO密集型工作负载、高竞争("hot spot"热点竞争问题)工作负载。
534 3
|
云安全 安全 架构师
云计算对就业的影响?
【6月更文挑战第22天】云计算对就业的影响?
449 6
|
运维 监控 Dubbo
阿里云互联网中间件五剑客之——企业级分布式应用服务EDAS
阿里云互联网中间件五剑客之——企业级分布式应用服务EDAS自制脑图, 企业级分布式应用服务 EDAS(Enterprise Distributed Application Service)是一个应用托管和微服务管理的 PaaS 平台,提供应用开发、部署、监控、运维等全栈式解决方案,同时支持 Spring Cloud、Apache Dubbo(以下简称 Dubbo )、HSF 等微服务运行环境,助力您的各类应用轻松上云。
669 91
阿里云互联网中间件五剑客之——企业级分布式应用服务EDAS

热门文章

最新文章