我们大多数用的是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接口
这个写法大家可以了解一下,毕竟还是有不少好处的:
- 不用写一大堆finally来关闭资源
- finally会造成一个异常被覆盖的问题,即try语句块中抛出某个异常,执行finally语句块中抛出了同样的异常,这样的话就会导致原有的异常会丢失,转而抛出的finally语句中的异常
- 在看别的大佬的代码时,万一看到这种写法不会出现不认识的情况,不然还要去百度,费时又费力
© 版权声明
THE END
暂无评论内容