JDK1.7中新增自动释放资源接口AutoCloseable

新增了try-with-resource 异常声明

在JDK7中只要实现了AutoCloseable或Closeable接口的类或接口,都可以使用try-with-resource来实现异常处理和资源关闭

异常抛出顺序。在Java se 7中的try-with-resource机制中异常的抛出顺序与Java se 7以前的版本有一点不一样。

是先声明的资源后关闭

JDK7以前如果rd.readLine()与rd.close()(在finally块中)都抛出异常则只会抛出finally块中的异常,不会抛出rd.readLine();中的异常。这样经常会导致得到的异常信息不是调用程序想要得到的。

JDK7及以后版本中如果采用try-with-resource机制,如果在try-with-resource声明中抛出异(可能是文件无法打或都文件无法关闭)同时rd.readLine();也势出异常,则只会势出rd.readLine()的异常。

public class Main {
 //声明资源时要分析好资源关闭顺序,先声明的后关闭
 //在try-with-resource中也可以有catch与finally块。
 //只是catch与finally块是在处理完try-with-resource后才会执行。
 public static void main(String[] args) {
  try (Resource res = new Resource();
    ResourceOther resOther = new ResourceOther();) {
   res.doSome();
   resOther.doSome();
  } catch (Exception ex) {
   ex.printStackTrace();
  }
 }
 //JDK1.7以前的版本,释放资源的写法
 static String readFirstLingFromFile(String path) throws IOException {
  BufferedReader br = null;
  try {
   br = new BufferedReader(new FileReader(path));
   return br.readLine();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (br != null)
    br.close();
  }
  return null;
 }
 //JDK1.7中的写法,利用AutoCloseable接口
 //代码更精练、完全
 static String readFirstLineFromFile(String path) throws IOException {
  try (BufferedReader br = new BufferedReader(new FileReader(path))) {
   return br.readLine();
  }
 }
}
class Resource implements AutoCloseable {
 void doSome() {
  System.out.println("do something");
 }
 @Override
 public void close() throws Exception {
  System.out.println("resource closed");
 }
}
class ResourceOther implements AutoCloseable {
 void doSome() {
  System.out.println("do something other");
 }
 @Override
 public void close() throws Exception {
  System.out.println("other resource closed");
 }
}
时间: 2024-10-03 16:17:58

JDK1.7中新增自动释放资源接口AutoCloseable的相关文章

使用IBM ODM V8.5中新增的RESTful接口的方法

本文将简要介绍 HTDS,讨论构建一个 HTDS 客户端和使用 IBM ODM V8.5 中新增的 http://www.aliyun.com/zixun/aggregation/14172.html">RESTful 接口的方法.本文将 重点介绍使用 HTDS 的潜在问题和难点,这些问题和难点主要与控制它的服务接口相关,本文还会介绍一些解决这些问题的实用方法. Hosted Transparent Decision Service (HTDS) 是一个部署到应用服务器上的预定义的应用程序

Jsdk5.0中新增枚举enum类型使用例解

js 作者:Junsan Jin 日期:2005-03-25 邮箱:junsan21@126.com ; junnef21@sohu.com Jsdk5.0中新增了很多的特性,如泛型.增强的循环.改进的装.拆箱.静态引入等,大大增强了java语言的易用性. 我现在正在做一个从com+(dcom)平台到j2ee平台移植的项目,中间有很多枚举类型的定义,以前做起来要引入第三方类库,或者自己写类库,或者干脆定义成静态变量使用,很不方便,而且可能会产生很多问题.Jsdk5.0的发布正好解决了这些问题.

JDK1.5中添加enum类与数据库表进行映射

在JDK1.5中添加了enum类,它可以用来与数据库表进行映射.而且实现起来非常方便. 下面举个例子: 开发环境: JDK 1.6 U2 eclipse 3.3 数据库中有一表:UserUser 其有两个字段:1.id:2.username, 我们就映射出一个enum: public enum UserUser { username, id; } 接下来我们就开始用它来写SQL语句了: public class UserTest { public static void main(String

Word 2010组件中新增的“文档导航”功能

工作中我们常常需要处理一些比较长的文档,想要重新组织文档内容要用鼠标滚轮来回滚动,既麻烦又很容易出错.不过如果你已经用上了office 2010,就不会再被这个问题困扰了.使用word 2010组件中新增的"文档导航"功能,再长的文档你也能轻松掌控了. 在Word 2010中打开一篇较长的文档后,切换到"视图"选项卡,勾选"导航窗格". 开启导航窗格 导航功能开启后,在文档左侧会出现一个导航栏. 导航窗格 在导航栏的搜索框中输入要查找的关键字后你

Java并发编程总结4——ConcurrentHashMap在jdk1.8中的改进(转)

一.简单回顾ConcurrentHashMap在jdk1.7中的设计 先简单看下ConcurrentHashMap类在jdk1.7中的设计,其基本结构如图所示: 每一个segment都是一个HashEntry<K,V>[] table, table中的每一个元素本质上都是一个HashEntry的单向队列.比如table[3]为首节点,table[3]->next为节点1,之后为节点2,依次类推. public class ConcurrentHashMap<K, V> ext

c#:使用using关键字自动释放资源未必一定就会有明显好处

  记录这篇文章的灵感来源来自今天下班前与同事的小小争论,我现在开发的一个项目中,有这样一段代码: public string ToXML() { string strXml = string.Empty; try { MemoryStream ms = new MemoryStream(); XmlSerializer xml = new XmlSerializer(this.GetType()); xml.Serialize(ms, this); byte[] arr = ms.ToArra

eBay在买家体验周报中新增销售限额提升自检功能

摘要: 很多经营eBay平台的跨境电商卖家,尤其是一些新卖家,对于该平台的账户销售限额往往感到云里雾里. 根据eBay的平台规则:如果超出每月账户销售额度的上限,卖家应该减少在eBay上的 很多经营eBay平台的跨境电商卖家,尤其是一些新卖家,对于该平台的"账户销售限额"往往感到云里雾里. 根据eBay的平台规则:如果超出每月账户销售额度的上限,卖家应该减少在eBay上的出售中刊登物品的数量,以符合销售额度的规定,否则卖家超过目前上限的刊登物品可能会自动结束销售. 雨果网获悉,对于eB

Word2010文档中应用自动套用格式

  "自动套用格式"功能可以帮助用户根据"自动套用格式"选项中预设的格式迅速格式化选中的Word文档,用户首先需要将"自动套用格式"按钮放置到Word2010文档窗口的快速访问工具栏(参考教程<将"自动套用格式"命令放在快速访问工具栏>).在Word2010文档中应用自动套用格式的步骤如下所述: 第1步,打开Word2010文档窗口,选中需要应用自动套用格式的文本(如果不选中文本,自动套用格式将作用于整篇Word文

c#2.0中新增的两个压缩类

压缩 .NET Framework 2.0 中新增的两个压缩类 System.IO.Compression 命名空间   注意:此命名空间在 .NET Framework 2.0 版中是新增的. System.IO.Compression 命名空间包含提供基本的流压缩和解压缩服务的类. (downmoon原作)  类                               说明  DeflateStream         提供用于使用 Deflate 算法压缩和解压缩流的方法和属性.  G