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再次捕获....代码老繁琐了!!!!

   }

 

JavaCore10版Ⅰ-捕获异常

对于上面两种写法,通过多次try..catch 总能捕获到所有异常,缺点就是代码繁琐,关闭N个流,try..catch..N次,好在Java7的时候增加了try with resource语句,解决了这一问题和之前的try..catch想比就是多了一对括号,括号里面用来定义你要最终处理的类

如下图:

JavaCore10版Ⅰ-捕获异常

注意事项:

    1.多个变量时候,括号里面以分号“;”隔开

    2. 必须是实现了AutoCloseable接口的类才能用此写法,Closeable也行,因为Closeable继承了AutoCloseable接口