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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈林阳 黑马帝   /  2011-9-22 21:34  /  2353 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void copy_1()
        {
                FileWriter fw = null;
                FileWriter fr = null;
                try
                {
                        fw = new FileWriter("SystemDemo_copy.txt");
                        fr = new FileReader(SystemDemo.java);

                        char[] buf = new char[1024];

                        int len =0;
                        while((len = fr.read(buf))!=-1)
                        {
                                fw.write(buf,0,len);
                        }
                }
                catch (IOException e)
                {
                        throw new RuntimException("读写失败");
                }
                finally
                {
                        if(fr!=null)
                                try
                                {
                                        fr.close();
                                }
                                catch (IOException e)
                                {
                                }
                                if(fw!=null)
                                        try
                                        {
                                                fw.close();
                                        }
                                        catch (IOException e)
                                        {
                                        }
                }
        }


请问finally中为什么要try catch 两次啊

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

5 个回复

倒序浏览
黑马网友  发表于 2011-9-22 22:14:52
沙发
毕老师的视频里面,关于IO流的异常处理讲的很清楚,你可以去复习一下,

评分

参与人数 1技术分 +1 收起 理由
admin + 1 对,可以先看视频,不懂再问!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-23 11:50:55
藤椅
finally语句:在任何情况下都必须执行的代码。
获取某种类型资源的程序必须显示地将这些资源返回给系统,以避免资源泄漏。Java对程序不再使用的内存执行自动垃圾收集,因而避免了大量的资源泄漏。然而,Java仍有可能出现其他种类的资源泄漏。例如:没有正确关闭文件、数据库连接和网络连接,则其他程序将不能使用这些资源,甚至同一程序的其他执行部分也不能使用它们。
   此处不论文件读写是否成功执行,都会关闭IO流的相关资源。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-23 12:25:46
板凳
。。感觉你们都答非所问的。。。  人家问 finally中的 catch 为什么要弄两个。。?
楼主。。可以这样的。直接一个try-catch写在外面。两个判断写在里面,,就变成一个try-catch了。。     
    恩。你这里 的两个try-catch 分别在两个 if中。。
回复 使用道具 举报
黑马网友  发表于 2011-9-24 23:06:09
报纸

回复 楼主 的帖子

fr!=null和fw!=null在两个if语句中,fr.close(); 和 fw.close(); 两者都可能发生异常,所以要用两个try-catch。
回复 使用道具 举报
黑马网友  发表于 2011-9-24 23:22:25
地板
如果try块中的代码发生了异常,那么就会执行catch块中的代码,完后就会看有没有finally块,如果有,则进去,没有,则会跳出当前方法,不可能再执行catch块后面的代码。finally块就是为了让你执行一些你非常想要执行的代码,无论程序是否发生异常,比如关闭连接或其它的资源释放语句。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马