虽然楼主问题已解决,但还是说一点自己的想法。
楼主所列的代码在编译时肯定是不会抛出异常的,因为流的close方法的作用是关闭流释放底层资源,只要代码语法格式正确就会编译通过,简单想一想就可以明白。我想说的是fw.close();和fr.close();分别在两个不同的try{}catch(){}代码块中,是互不影响的,前一个try{}中代码发生的异常,在相应的catct(){}代码块中捕捉并执行完处理异常代码之后,还是会顺序下一个try{}catch(){}代码块。我想楼主应该是跟受这么个概念影响:在同一个try{}中,如果一条语句发生异常,则不会继续执行该语句之后的代码,注意是同一个try{}中。拿个简单代码举例:- class TestException
- {
- public static void main(String[] args)
- {
- try
- {
- int[] arr = new int[]{1,2,3};
- System.out.println(arr[3]);//此处发生异常
- System.out.println("运行不到这里");
- }
- catch (Exception e)
- {
- System.out.println("catch块中的语句");
- }
- System.out.println("可以运行到这里");
- }
- }
复制代码 把“System.out.println("可以运行到这里");”语句换成try{}catch(){}代码块即和楼主代码类似。
我记得毕老师在讲这块的时候就说过,不能把fr.close()和fw.close()放在同一个try中,如果这样,一个发生异常,另一个就执行不到,应该就是这个意思。
另外,毕老师也说过,要将相关的代码放在同一个try中,这样一条语句发生异常之后继续执行相关的代码就失去了意义,而放在一个try中则不会继续执行相关代码。所以总的来说就是,相关代码应该放在同一个try中,这样可以避免执行无效代码;无关代码要放在不同的try中(如果都发生异常),这样代码互不影响执行。
希望帮到楼组理解这个问题。 |