当前位置: 首页 > news >正文

《Effective Java》解读第9条:try-with-resources 优先于 try-finally

文章目录

  • 第9条:try-with-resources 优先于 try-finally
    • 优势对比
    • 总结

第9条:try-with-resources 优先于 try-finally

绝对优先使用 try-with-resources,完全淘汰 try-finally 用于资源管理。

优势对比

  1. 代码简洁性
// ❌ 传统方式 - 繁琐易错
InputStream in = null;
try {in = new FileInputStream("file.txt");// 使用资源
} finally {if (in != null) {try {in.close();} catch (IOException e) {// 处理关闭异常}}
}// ✅ 现代方式 - 简洁安全
try (InputStream in = new FileInputStream("file.txt")) {// 使用资源
} // 自动关闭,无需finally块
  1. 异常处理
// ❌ try-finally:后发生的异常会覆盖先发生的异常
try {throw new RuntimeException("业务异常");
} finally {throw new RuntimeException("关闭异常"); // 这个会覆盖上面的异常!
}// ✅ try-with-resources:保留所有异常信息
try (ProblemResource res = new ProblemResource()) {throw new RuntimeException("业务异常");
}
// 两个异常都会保留,业务异常为主异常,关闭异常被抑制
  1. 使用条件
// 所有标准库资源都支持
try (InputStream in = new FileInputStream("file");OutputStream out = new FileOutputStream("file2");Connection conn = DriverManager.getConnection(url);PreparedStatement stmt = conn.prepareStatement(sql)) {// 业务逻辑
}
  1. 多资源自动管理
// 多个资源自动按创建顺序的逆序关闭
try (FileInputStream input = new FileInputStream("source");FileOutputStream output = new FileOutputStream("target");ZipOutputStream zip = new ZipOutputStream(output)) {// 先关闭 zip,然后 output,最后 input
}
  1. 自定义资源实现
public class MyResource implements AutoCloseable{@Overridepublic void close() throws Exception {// 释放资源}public static void main(String[] args) {try (MyResource resource = new MyResource()) {// 使用资源} catch (Exception e) {// 处理异常}}
}

总结

代码更简洁:减少样板代码,提高可读性
异常更完整:不会丢失原始异常信息
资源更安全:自动关闭,避免资源泄漏
顺序更智能:自动逆序关闭多个资源
调试更容易:完整的异常链便于问题定位

只有在必须处理 非 AutoCloseable 资源 时才考虑 try-finally,但这种场景极少。

http://www.dtcms.com/a/578888.html

相关文章:

  • redis 大key问题整理
  • 如何解决 pip install --target 安装成功但脚本不在 PATH(无法调用)问题
  • 深圳企业集团网站建设一个人制作网站
  • 网站外链建设原则中国最大建筑招聘网
  • 李沐深度学习笔记D2-矩阵计算
  • 做期货关注网站淄博网站排名优化报价
  • 创新的南昌网站建设住房和城乡建设部网站城市稽查
  • 张家口建设局网站网站规划的内容
  • 花生壳做网站速度古典asp网站源码
  • leetcode 2208 将数组和减半的最少操作次数
  • 免费的外贸网站怎么搭建个人网站电脑做服务器
  • php网站开发软件是什么烟台芝罘区住房建设局网站
  • AI代码编辑器 - AI代码框架 - AIDevFlow - 使用手册
  • 镇江网站建设哪家好阳江市企业网站优化
  • 教程网站后台密码杭州网站建设unohacha
  • 系统运维Day01_SSH服务
  • 长沙企业网站建设优度wordpress英文
  • 一二三线协同 | IT运维系统如何实现问题处理的高效闭环
  • 建设银行淮安招聘网站阿里云网站建设官方自营店
  • 做外贸在那些网站找业务增城网站开发
  • 【HarmonyOS-App发布】
  • 建网站的费用是多少钱旅游电子商务网站建设的流程
  • JVM(Java Virtual Machine)
  • css全局样式初始化
  • 产品类网站手机怎么下载网页上的视频
  • linux一次性批量更新文件时间戳
  • 阿里云服务器可以做下载类网站吗整容网站模板
  • 萤石开放平台控制台视频直播(原播放地址)操作指南
  • 【stm32简单外设篇】- HC-SR501 / 人体红外被动红外传感器
  • 电子商务网站开发的关键点沈阳建设工程交易网官网