A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 牛杨 于 2012-8-13 18:37 编辑

昨天复习笔记的时候忽然发现的问题:
就是有多个IO流用完的时候需要关闭,但对毕老师视频中用的关闭方式(关闭代码见下)我感到有些困惑:
如果在执行fr.close();这句时抛出了IOException异常,那岂不是就不会执行到了下面那个fw.close()的关闭动作了么?
也不知道是不是我理解错了,想了好一会儿弄的头大也没想明白。
求各位老少爷们儿能指点小弟一二! 不胜谢谢!

…………
finally
                {
     if(fr!=null)
                                     try
                                     {
          fr.close();
     }
                                     catch (IOException e)
                                     {
     }
     if(fw!=null)
                                     try
                                     {
                                                 fw.close();
     }
                                     catch (IOException e)
                                     {
                                     }
                }

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

2 个回复

正序浏览
如果fr.close()真的发生异常,的确是不会执行后面的fw.close(),但是程序会中断,会报错,你要处理呀,总要把程序改到不报异常吧,以后运行时不就可以关闭资源了。
回复 使用道具 举报
这里要先说下异常处理机制的好处:
1,把错误代码与常规代码分开
2,可以在catch中传播错误信息
3,可以对错误类型分组
4,方便定位错误,维护

异常有这样的定义:
阻止当前方法或作用域继续执行的问题。是可预测但是又没办法避免一定不会发生的一种错误.
异常处理后也不能认为程序就正常了,try-catch模块只是告诉你这里有可能会出现不正常的情况,请注意.

简单的说这里写了try-catch后
当发生错误时,程序不至于崩溃,可以在短时间内找到错误所在行.

所以如果fr.close()发生了错误会执行catch块中的语句,提示你这里有错误,让你处理,后面的fw.close()不会执行,其实fr.close()也没操作成功.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马