try-finally 语句是保证资源正确关闭的最佳方式,但是当添加多个资源时,情况会变糟

// try-finally is ugly when used with more than one resource!
static void copy(String src, String dst) throws IOException {InputStream in = new FileInputStream(src);try {OutputStream out = new FileOutputStream(dst);try {byte[] buf = new byte[BUFFER_SIZE];int n;while ((n = in.read(buf)) >= 0)out.write(buf, 0, n);} finally {out.close();}} finally {in.close();}
}

当 Java 7 引入了 try-with-resources 语句时,所有这些问题一下子都得到了解决。要使用这个构造,资源必须实现 AutoCloseable 接口

// try-with-resources on multiple resources - short and sweet
static void copy(String src, String dst) throws IOException {try (InputStream in = new FileInputStream(src);OutputStream out = new FileOutputStream(dst)) {byte[] buf = new byte[BUFFER_SIZE];int n;while ((n = in.read(buf)) >= 0)out.write(buf, 0, n);}
}

try-with-resources 语句中添加 catch 子句,就像在常规的 try-finally 语句中一样

// try-with-resources with a catch clause
static String firstLineOfFile(String path, String defaultVal) {try (BufferedReader br = new BufferedReader(new FileReader(path))) {return br.readLine();} catch (IOException e) {return defaultVal;}
}

Effective Java~9. try-with-resource 优先于 try-catch相关推荐

  1. 第 3 次读 Effective Java,这 58 个技巧最值!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:Dong GuoChao <Effective ...

  2. 读完《Effective Java》后,总结了 50 条开发技巧

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | Dong GuoChao 来源 | https ...

  3. Effective Java读书笔记一:并发

    第66条:同步访问共享的可变数据 关键字synchronized可以保证在同一时刻,只有一个线程可以执行某一个方法,或者某一个代码块. 同步不仅可以阻止一个线程看到对象处于不一致的状态中,它还可以保证 ...

  4. 读完 Effective Java,我整理了 59 条技巧!(含pdf)

    点击⬆️方"逆锋起笔",公众号回复 编程资源领取大佬们推荐的学习资料 上一篇:CTO 写低级 Bug,致公司 70 GB 数据泄露! 作者:Dong GuoChao 链接:http ...

  5. Effective Java(第3版) 90条经验法则

    目录 第2章 创建和销毁对象 第1条:用静态工厂方法替代构造器 第2条:遇到多个构造器参数时要考虑使用构建器 例子 使用 第3条:用私有构造器或者枚举类型强化Singleton属性 例子 使用 第4条 ...

  6. Effective Java读书笔记八:序列化(74-78)

    第74条:谨慎地实现Serializable接口 对象序列化API,它提供了一个框架,用来将对象编码成字节流,并从字节流编码中重新构建对象.将一个对象编码成一个字节流,称作将该对象序列化,相反的处理过 ...

  7. Effective java 总结11 - 序列化

    Effective java 总结11 - 序列化 序列化:对象 -> 字节流 反序列化:字节流 -> 对象 第85条 其他方法优先于java序列化 序列化的根本问题在于:攻击面过于庞大, ...

  8. Effective java 3th-读书笔记

    第二章 创建和销毁对象 第1条.用静态工厂方法替代构造器 它只是一个返回类实例的静态方法,不同于设计模式的工厂模式. 优点: 1.静态工厂方法有名称,易读.易用 一个类只能有一个带有指定签名的构造器, ...

  9. 《Effective Java》真的是一本值得一直去钻研的好书

    文章目录 <Effective Java>读书笔记 第一章 引言 第二章 创建和销毁对象 1 考虑使用静态工厂方法替代构造方法** 2 当构造方法参数过多时使用builder(建造者) 模 ...

  10. [java] JVM监控与调优

    原文出处:http://www.cnblogs.com/zhguang/p/java-jvm-gc.html   光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分 ...

最新文章

  1. 如何选择最佳技术来加速文件传输!
  2. 超图js版 iclient 基本开发 - 加载基本图层(以天地图示例)和基本地图控件
  3. [linux] SIGPIPE信号处理
  4. Windows10彻底禁止更新
  5. 计算机课实验三,成都信息工程学院计算机网络课程实验三
  6. 【javascript】DOM操作方法(3)——document节点属性
  7. 阿里云ESC服务器数据快速转移至轻量应用服务器
  8. Python中非纯文本文件的读取
  9. Chrome JS断点调试技巧
  10. splay详解(三)
  11. 【杂谈】需要mark的一些东西
  12. Axure rp 9 的汉化破解版
  13. Excel常用功能(持续更新)
  14. 密室逃脱线上如何精准获客?
  15. html表格某一行背景颜色设置,HTML表格行背景颜色与浮动属性不一样
  16. vue 获取当前本机ip_Vue项目启动时自动获取本机IP地址
  17. Win11微软输入法打不出汉字怎么办?
  18. Linux学习笔记2—常见指令的使用
  19. Linux ARM平台开发系列讲解(IIO子系统) 2.8.1 IIO驱动开发分析
  20. IMT和北京大学微纳电子学研究院持续开展战略合作,三位优秀学生获2017年度MEMS专项奖学金

热门文章

  1. 基于携程游记的出行领域顺承事件图谱项目
  2. 论文学习14-End-to-End Relation Extraction using LSTMs on Sequences and Tree Structures(端到端实体关系抽取)
  3. 工信部推动第二批“5G+工业互联网”实践的通知
  4. SQL Server 2005: Constraints
  5. android一体机-迅为10.1寸用于售货机、人机界面、自动终端、触摸控制
  6. css比较特殊选择器汇总(持续更新)
  7. 洛谷 P1656 炸铁路
  8. Tomcat启动时项目重复加载,导致资源初始化两次的问题
  9. weblogic启动受管服务器报错Authentication for user weblogic denied (weblogic 11g 域账号密码不生效的解决方法)...
  10. 计算机软考笔记之《数据库基础》