Java9增强的自动资源管理

 在学习《Java try catch finally语句》一节后我们可以发现,当程序使用 finally 块关闭资源时,程序会显得异常臃肿,例如以下代码。

  public static void main(String[] args) { FileInputStream fis = null; try { fis = new FileInputStream("a.txt"); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { // 关闭磁盘文件,回收资源 if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } }}

  Java 7 以前,上面程序中的 finally 代码块是不得不写的“臃肿代码”,为了解决这种问题,Java 7 增加了一个新特性,该特性提供了另外一种管理资源的方式,这种方式能自动关闭文件,被称为自动资源管理(Automatic Resource Management)。该特性是在 try 语句上的扩展,主要释放不再需要的文件或其他资源。

  自动资源管理替代了 finally 代码块,并优化了代码结构和提高程序可读性。语法如下:

在家打王者,不如自己开发王者_开发Java游戏项目【王者荣耀】24小时搞定https://www.bilibili.com/video/BV1QA4y197uo/ try (声明或初始化资源语句) { // 可能会生成异常语句} catch(Throwable e1){ // 处理异常e1} catch(Throwable e2){ // 处理异常e1} catch(Throwable eN){ // 处理异常eN}

  当 try 代码块结束时,自动释放资源。不再需要显式的调用 close() 方法,该形式也称为“带资源的 try 语句”。

  注意:

  try 语句中声明的资源被隐式声明为 final,资源的作用局限于带资源的 try 语句。

  可以在一条 try 语句中声明或初始化多个资源,每个资源以;隔开即可。

  需要关闭的资源必 须实现了 AutoCloseable 或 Closeable 接口。

  Closeable 是 AutoCloseable 的子接口,Closeable 接口里的 close() 方法声明抛出了 IOException,因此它的实现类在实现 close() 方法时只能声明抛出 IOException 或其子类;AutoCloseable 接口里的 close() 方法声明抛出了 Exception,因此它的实现类在实现 close() 方法时可以声明抛出任何异常。在家打王者,不如自己开发王者_开发Java游戏项目【王者荣耀】24小时搞定https://www.bilibili.com/video/BV1QA4y197uo/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值