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

JSON 2016-08-27 12:22:47 20290

今天在公司加班,把新项目 Down  下来, Elasticsearch  代码报错了The type java.lang.AutoCloseable cannot be resolved. It is indirectly referenced from required .class files... 如下图:

其实是因为 JDK  的原因,新版本的 Elasticsearch  最低需要1.7的 JDK 

JDK7 增加了一些新特性,其中报错AutoCloseable 等。新特性包括如下,下面主要说说AutoCloseable

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 AutoCloseableTest {
	// 声明资源时要分析好资源关闭顺序,先声明的后关闭
	// 在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");
	}
}


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/166.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
上天我不能,入地我不愿,我只能徘徊于天地之间。生当夏花,死而无憾!
相关文章
JDK1.7中新增自动释放资源接口AutoCloseable讲解
湖南地区备案“新增网站需提交组网方案或解说明”,关于备案做简单叙述
天气免费API接口,天气API接口请求讲解及源码下载
Springboot 打Jar包,Maven完美解决本地Jar包自动打入Springboot Jar包
溯源接口
如何把自己的Jar包上传到 maven 官方仓库,Maven上传图文讲解
文字转语音接口,支持汉字、英语,文字转音频开放接口,还支持翻译播
RBAC 介绍,案例讲解
cpu资源采集.json
国外程序员整理的Java资源大全(全部是干货)
最新文章
自媒体时代的贤内助——AI 视频云 4554
Golang 常见设计模式——装饰模式详细讲解 4309
Flink 在又拍云日志批处理中的实践 17475
个推异常值检测和实战应用-又拍云 4850
TCP 和 UDP协议详细讲解,优缺点分析讲解 15061
URL中乱七八糟的字符讲解,来源以及如何解决 10254
HTTP/3 来了,您真的了解它么? 9370
当我谈 HTTP 时,我谈些什么? 14607
新浪短链(t.cn)最新申请官方API的方法讲解。 78304
QUIC / HTTP3 协议详细分析讲解 12743
最热文章
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 671923
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 659640
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 579037
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 539810
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 506396
Elasticsearch教程(四) elasticsearch head 插件安装和使用 475844
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 241160
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 240852
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 220484
Elasticsearch教程(一),全程直播(小白级别) 218568
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...