try-with-resources 简介

try-with-resources 是 Java 7 引入的一种特殊的 try 语句,允许在使用时,声明一个或多个资源。这些资源,会在 try-with-resources 语句结束时,自动被关闭。

 

在 try-with-resources 中使用的资源,必须实现 java.lang.AutoCloseable 接口。

try-with-resources 示例(引自 Java 文档):

static void readFile(String path) {
	try (BufferedReader br = new BufferedReader(new FileReader(path))) {
		br.readLine();
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		// Others
	}
}

示例说明:

(1) 资源对象作用域:资源对象 br 的作用域为 try block 范围,即 try 的 { } 之间,在 catch 和 finally block 中无法访问该变量。

(2) 自动关闭:当 try block 中的代码运行完毕,资源对象 br 会被自动关闭,无需调用 br.close() 方法。

(3) 优先关闭:资源对象会在进入 catch 和 finally 之前被自动关闭。

 

在 Java 7 之前,为了保证资源对象在使用后被关闭,通常将关闭操作写在 finally block 中。但是,在 finally block 中,我们又需要 try catch 关闭方法的异常。

示例:

static void readFile(String path) {
	BufferedReader br = null;
	try {
		br = new BufferedReader(new FileReader(path));
		br.readLine();
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		if (br != null) {
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

由此可见,使用 try-with-resources 语句,可以简化我们的代码,同时,保证了资源对象一定会被关闭。

 

在 try-with-resources 中,允许同时定义多个资源,各资源之间用分号“;”分隔。

示例:

try (
	BufferedReader br = new BufferedReader(new FileReader(path));
	BufferedWriter bw = Files.newBufferedWriter(outputFilePath)
	) {
	String str = br.readLine();
	bw.write(str);
} catch (IOException e) {
	e.printStackTrace();
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值