java中带参数的try(){}语法含义是什么

我们大多数用的是try{ }的形式

InputStream is = null;
OutputStream os = null;
try {
	//...
} catch (IOException e) {
	//...
}finally{
	try {
		if(os!=null){
			os.close();
		}
		if(is!=null){
			is.close();
		}
	} catch (IOException e2) {
		//...
	}
}

因为java在1.7之后增加了AutoCloseable接口,java1.7以后增加了try(){}的形式(带资源的try)

try(
	InputStream is = new FileInputStream("...");
	OutputStream os = new FileOutputStream("...");
){
	//...
}catch (IOException e) {
	//...
}

括号里的内容支持包括流以及任何可关闭的资源,数据流会在 try 执行完毕后自动被关闭,而不用我们手动关闭了。括号里需要自动关闭的资源需要实现了AutoCloseable接口

这个写法大家可以了解一下,毕竟还是有不少好处的:

  1. 不用写一大堆finally来关闭资源
  2. finally会造成一个异常被覆盖的问题,即try语句块中抛出某个异常,执行finally语句块中抛出了同样的异常,这样的话就会导致原有的异常会丢失,转而抛出的finally语句中的异常
  3. 在看别的大佬的代码时,万一看到这种写法不会出现不认识的情况,不然还要去百度,费时又费力
© 版权声明
THE END
请撒泡尿证明你到此一游
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容