JavaCore10版Ⅰ-捕获异常
【try..catch..finally 和try with resource】
一般操作文件流的时候,捕获异常通常会带finally,目的是保证流被关闭,防止内存泄漏,如下图,两种写法:
第1种:try和finally解耦(finally不在放在最后,而是在try里面执行完直接finally,保证最外层的try捕获到所有异常)
第2种:finally里面如果异常,则程序终止,尤其是所有流的关闭都放在finally里面时候,很容易内存泄漏,淡然可以在finally再次捕获
比如:
...
} finally {
in.close();
out.close();//上面in.close()异常了 那么out可能就未被执行关闭,从而造成内存泄漏
//为了防止上面问题,还需要对in和out再次捕获....代码老繁琐了!!!!
}
对于上面两种写法,通过多次try..catch 总能捕获到所有异常,缺点就是代码繁琐,关闭N个流,try..catch..N次,好在Java7的时候增加了try with resource语句,解决了这一问题和之前的try..catch想比就是多了一对括号,括号里面用来定义你要最终处理的类
如下图:
注意事项:
1.多个变量时候,括号里面以分号“;”隔开
2. 必须是实现了AutoCloseable接口的类才能用此写法,Closeable也行,因为Closeable继承了AutoCloseable接口