黑马程序员技术交流社区

标题: try catch [打印本页]

作者: 陈林阳    时间: 2011-9-22 21:34
标题: try catch
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 两次啊
作者: 匿名    时间: 2011-9-22 22:14
毕老师的视频里面,关于IO流的异常处理讲的很清楚,你可以去复习一下,
作者: 匿名    时间: 2011-9-23 11:50
finally语句:在任何情况下都必须执行的代码。
获取某种类型资源的程序必须显示地将这些资源返回给系统,以避免资源泄漏。Java对程序不再使用的内存执行自动垃圾收集,因而避免了大量的资源泄漏。然而,Java仍有可能出现其他种类的资源泄漏。例如:没有正确关闭文件、数据库连接和网络连接,则其他程序将不能使用这些资源,甚至同一程序的其他执行部分也不能使用它们。
   此处不论文件读写是否成功执行,都会关闭IO流的相关资源。
作者: 匿名    时间: 2011-9-23 12:25
。。感觉你们都答非所问的。。。  人家问 finally中的 catch 为什么要弄两个。。?
楼主。。可以这样的。直接一个try-catch写在外面。两个判断写在里面,,就变成一个try-catch了。。     
    恩。你这里 的两个try-catch 分别在两个 if中。。
作者: 匿名    时间: 2011-9-24 23:06
标题: 回复 楼主 的帖子
fr!=null和fw!=null在两个if语句中,fr.close(); 和 fw.close(); 两者都可能发生异常,所以要用两个try-catch。
作者: 匿名    时间: 2011-9-24 23:22
如果try块中的代码发生了异常,那么就会执行catch块中的代码,完后就会看有没有finally块,如果有,则进去,没有,则会跳出当前方法,不可能再执行catch块后面的代码。finally块就是为了让你执行一些你非常想要执行的代码,无论程序是否发生异常,比如关闭连接或其它的资源释放语句。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2