黑马程序员技术交流社区

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

作者: 张盼    时间: 2014-5-14 16:27
标题: 异常抛出的问题
本帖最后由 张盼 于 2014-5-15 09:08 编辑

毕老师讲课时的一个问题:
class Demo
{
    int div (int a,int b)
    {
        if(b == 0)
            throw new ArithmeticException("被0除了");

        return a/b;
    }
}
中如果把ArithmeticException换成Exception,就必须在div方法中通过throws声明异常,而直接抛出ArithmeticException则不需要声明,是因为ArithmeticException是RuntimeException,为什么RuntimeException可以不用通过throws在方法上声明?求解


作者: sunships    时间: 2014-5-14 20:00
异常声明的目的就是让调用者(虚拟机)进行处理。可以从两方面理解 1、运行时异常是运行的时候才会出现的异常即运行了才知道有什么异常,都不知道会出现什么问题怎么去声明?2、运行时异常表示无法让程序恢复运行的异常,导致这种异常的原因通常是由于执行了错误的操作,如果调用者虚拟机(JVM)对这些运行时异常进行了处理就相当于隐藏了代码错误,这是不允许的。这样的异常必须让程序员手动处理。
作者: 927233671    时间: 2014-5-14 21:04
本帖最后由 927233671 于 2014-5-14 21:07 编辑

RuntimeException是运行时异常,程序运行没意义。java虚拟机希望程序停掉,不需要调用者处理,需要程序员修改方法程序。java虚拟机不想让调用者处理,希望内部解决。所以不用在程序上声明。
RuntimeException 还有一种情况:函数上声明异常,调用者不处理。程序也可以编译成功。所以自定义异常时,如果异常发生时,程序无法继续运行,就继承RuntimeException

作者: 来男.    时间: 2014-5-14 22:20
小结一下:

异常分两种:
1:编译时被检查的异常,只要是Exception及其子类都是编译时被检测的异常。
2:运行时异常,其中Exception有一个特殊的子类RuntimeException,以及RuntimeException的子类是运行异常,也就说这个异常是编译时不被检查的异常。
编译时被检查的异常和运行时异常的区别:
编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。
声明的原因:是需要调用者对该异常进行处理。
运行时异常如果在函数内被抛出,在函数上不需要声明。
不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正。

楼主可以了吗?



作者: 张盼    时间: 2014-5-15 09:07
来男. 发表于 2014-5-14 22:20
小结一下:

异常分两种:1:编译时被检查的异常,只要是Exception及其子类都是编译时被检测的异常。2:运 ...

明白了,谢谢




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