Graceful Java之try...catch()

[复制链接]
发表于 2022-10-25 19:22:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
[优美的Java代码之try...catch]

目录

概述

通常我们使用try...catch()捕获异常时,如果遇到类似IO流的处理,要在finally部分关闭IO流。这是JDK1.7之前的写法了;
在JDK7以后,可以使用优化后的try-with-resource语句,该语句确保了每个资源,在语句结束时关闭。所谓的资源是指在程序完成后,必须关闭的流对象。写在()里面的流对象对应的类都实现了自动关闭接口AutoCloseable。
优化

语法:
  1. try (创建流对象语句,如果多个,使用';'隔开) {
  2.     // 读写数据
  3. } catch (IOException e) {
  4.     e.printStackTrace();
  5. }
复制代码
优化前写法(JDK1.7之前)
  1. Properties prop = new Properties();
  2. File configFile = new File("/home/appconfig.properties");
  3. FileInputStream fs = null;
  4. InputStreamReader reader = null;
  5. try {
  6.     fs = new FileInputStream(configFile);
  7.     reader = new InputStreamReader(fs, "utf-8");
  8.     prop.load(reader);
  9. } catch (Exception e) {
  10.     Logger.error("load file error!!", e);
  11. } finally {
  12.     try {
  13.         if (reader != null) {
  14.             reader.close();
  15.         }
  16.         if (fs != null) {
  17.             fs.close();
  18.         }
  19.     } catch (IOException e) {
  20.         e.printStackTrace();
  21.     }
  22. }
复制代码
优化后写法(JDK1.7及以后)
  1. try (FileInputStream fs = new FileInputStream(configFile); InputStreamReader reader = new InputStreamReader(fs, "utf-8")) {
  2.     prop.load(reader);
  3. } catch (Exception e) {
  4.     Logger.error("load file error!!", e);
  5. }
复制代码
延伸阅读:嵌套的文件流如何正确的关闭


  • 嵌套打开的流只需关闭最后打开的流,先打开的会自动关闭;
  • 打开的流可以多次关闭不会出错;
  • 后面尝试打开流时可能会发生异常,此时要考虑关闭前面已经打开的流。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表