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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴玉辉 中级黑马   /  2012-4-1 14:53  /  1725 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么捕获异常时,要将父类异常放在最后呢?

8 个回复

倒序浏览
父类异常更广泛,子类异常更具体,这样将父类异常放在最后,就是要捕获更加详细的异常信息,如果将父类异常放在前面的话,
那么后面的那些子类异常捕获代码还有必要写吗?
回复 使用道具 举报
如果父类放前面的话,子类异常就执行不到了,
例如:
catch(Exception e)放最前面的话,不管什么异常,都被Exception捕捉处理了,下面写的异常就没机会执行了。
回复 使用道具 举报
因为在异常中的子父类,子类的异常必须是父类异常的子集,而且它很有可能是父类异常的具体化,
当子类有多个具体异常时,如果先抛父类,当异常发生时,你也就没法辨别是哪个发生异常了
回复 使用道具 举报
之所以将子异常放在前面也是为了让你的报错更准确,如果就把父类所有异常都抛出了,到时候抛出来的异常你自己都不知道是出现在哪里的。
举个例子:如果我说北京有坏人,要抓住坏人,你会没有着落
          但是我如果说北京某培训机构某期班有坏人,那么你就很容易抓到
    我们一般的做法是在前期的子类描述中将异常逐一抛出的,然后再在父类里抛异常。这样就保证了所有的异常都被抛出。
这就好比:我把一班不喜欢洗袜子的人纠出来,二班不喜欢洗袜子的人纠出来....  然后我在把这个年级的不喜欢洗袜子的人纠出来。这样就可以保证最后被纠出来的那个不喜欢喜袜子的人不是一班、二班、...而是其他班的。方便我们定位这个异常。
回复 使用道具 举报
再我们用catch处理异常的时候,一定要每个异常分别对应处理方法。而java虚拟机再执行代码的时候是逐行执行的,如果把父类的处理方法写在上面了,就会先被虚拟机执行来处理子类的异常,那么对应的子类处理方式就执行不到了。
这样就会达不到分别对应处理异样的效果!
回复 使用道具 举报
    首先是将要发生的一场进行声明,当程序运行发现异常时,就会将其捕捉。catch(Exception e)这样就被处理了
回复 使用道具 举报
       上面字写错了{:soso_e118:}
首先是将要发生或者有可能发生的异常进行声明,当程序运行发现异常时,就会将其捕捉。catch(Exception e),捕捉到异常之后进行处理,下面的代码就没机会执行了,如果不将其声明,程序在父类发生了异常,下面的代码还会被执行一遍,为了减轻虚拟机的负担
回复 使用道具 举报
因为程序按流程一般是自上向下执行的,
所以把父类放在上面的话,因为多态的原因。。直接就模糊处理掉了。
而下面更具体的处理就无法捕捉到了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马