黑马程序员技术交流社区

标题: 求教关于抛出多异常的问题 [打印本页]

作者: 吴玉辉    时间: 2012-4-1 14:53
标题: 求教关于抛出多异常的问题
为什么捕获异常时,要将父类异常放在最后呢?
作者: 如梦初醒    时间: 2012-4-1 15:02
父类异常更广泛,子类异常更具体,这样将父类异常放在最后,就是要捕获更加详细的异常信息,如果将父类异常放在前面的话,
那么后面的那些子类异常捕获代码还有必要写吗?
作者: niceBoy    时间: 2012-4-1 15:08
如果父类放前面的话,子类异常就执行不到了,
例如:
catch(Exception e)放最前面的话,不管什么异常,都被Exception捕捉处理了,下面写的异常就没机会执行了。
作者: 刘元明    时间: 2012-4-1 15:09
因为在异常中的子父类,子类的异常必须是父类异常的子集,而且它很有可能是父类异常的具体化,
当子类有多个具体异常时,如果先抛父类,当异常发生时,你也就没法辨别是哪个发生异常了
作者: 胡元    时间: 2012-4-2 07:50
再我们用catch处理异常的时候,一定要每个异常分别对应处理方法。而java虚拟机再执行代码的时候是逐行执行的,如果把父类的处理方法写在上面了,就会先被虚拟机执行来处理子类的异常,那么对应的子类处理方式就执行不到了。
这样就会达不到分别对应处理异样的效果!
作者: 陈苓    时间: 2012-4-2 11:08
    首先是将要发生的一场进行声明,当程序运行发现异常时,就会将其捕捉。catch(Exception e)这样就被处理了
作者: 陈苓    时间: 2012-4-2 11:11
       上面字写错了{:soso_e118:}
首先是将要发生或者有可能发生的异常进行声明,当程序运行发现异常时,就会将其捕捉。catch(Exception e),捕捉到异常之后进行处理,下面的代码就没机会执行了,如果不将其声明,程序在父类发生了异常,下面的代码还会被执行一遍,为了减轻虚拟机的负担
作者: 葛尧    时间: 2012-4-2 13:21
因为程序按流程一般是自上向下执行的,
所以把父类放在上面的话,因为多态的原因。。直接就模糊处理掉了。
而下面更具体的处理就无法捕捉到了
作者: 欧阳才志    时间: 2012-4-2 13:31
之所以将子异常放在前面也是为了让你的报错更准确,如果就把父类所有异常都抛出了,到时候抛出来的异常你自己都不知道是出现在哪里的。
举个例子:如果我说北京有坏人,要抓住坏人,你会没有着落
          但是我如果说北京某培训机构某期班有坏人,那么你就很容易抓到
    我们一般的做法是在前期的子类描述中将异常逐一抛出的,然后再在父类里抛异常。这样就保证了所有的异常都被抛出。
这就好比:我把一班不喜欢洗袜子的人纠出来,二班不喜欢洗袜子的人纠出来....  然后我在把这个年级的不喜欢洗袜子的人纠出来。这样就可以保证最后被纠出来的那个不喜欢喜袜子的人不是一班、二班、...而是其他班的。方便我们定位这个异常。




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