黑马程序员技术交流社区

标题: 异常抛出!!!!! [打印本页]

作者: 小黑-张颖    时间: 2011-9-4 06:19
标题: 异常抛出!!!!!
class Copy{
        public static void copy(String from, String to)
        {
                FileReader fr=null;
                FileWriter fw=null;
                try{
                        fr=new FileReader(from);
                        fw=new FileWriter(to);
                        char[] cbuf=new char[1024];
                        int length;
                        while((length=fr.read(cbuf))!=-1)
                        {
                                fw.write(cbuf,0,length);
                               
                        }
                               
                }catch(FileNotFoundException e)
                {
                        e.printStackTrace();
                }catch(IOException e)
                {
                        e.printStackTrace();
                }
               
        }
       
}





为什么要抛出两个异常呢!!!
为什么不把:
             catch(FileNotFoundException e)
                {
                        e.printStackTrace();
                }catch(IOException e)
                {
                        e.printStackTrace();
                }
改写成       catch(Exception e)
                {e.printStackTrace();
                  }
作者: 匿名    时间: 2011-9-4 07:28
Exception的范围更大,如果你想了解程序中发生的异常具体是哪方面,就应该抛出更为具体的异常
首先应该捕获范围最小的异常,再扩大范围,否则异常会在前面被捕获,后面的catch永远没有机会执行
作者: 匿名    时间: 2011-9-4 09:16
IOException异常有很多种,如ClosedChannelException, EOFException, FileLockInterruptionException, FileNotFoundException,等,前面任意一种异常都会触发IOException,而任何异常都会被Exception捕获,如果你不单独捕获具体的异常,那么当发生异常时你将不知道是EOFException还是FileNotFoundException,这样对程序的调试提高了复杂性,我们捕捉异常的最终目的就是尽快找到并解决,很显然知道具体的异常对症下药能最大程度提高效率。
作者: 匿名    时间: 2011-9-4 09:26
楼上已经说的很明白了哦
作者: 匿名    时间: 2011-9-4 10:51
标题: 回复 板凳 的帖子

作者: 匿名    时间: 2011-9-6 07:32
恩 已经了解了
作者: 匿名    时间: 2011-9-6 08:43
标题: 回复 楼主 的帖子
楼主你改成那样也不是不可以,

[b]但原则上来讲 ,抛异常的地方应该按照异常的不同而做不同的处理[/b]

如果你改成那样,就是把所有可能的异常一股脑的都捕获了, 这样的话程序原则就不对, 代码维护起来也会比较麻烦




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