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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张盼 中级黑马   /  2014-5-14 16:27  /  1577 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张盼 于 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在方法上声明?求解

5 个回复

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

评分

参与人数 1技术分 +1 收起 理由
天涯追梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 927233671 于 2014-5-14 21:07 编辑

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

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

楼主可以了吗?


点评

说的很好,就是这样子的  发表于 2014-5-15 20:06

评分

参与人数 1技术分 +1 收起 理由
天涯追梦 + 1 很给力!

查看全部评分

回复 使用道具 举报
来男. 发表于 2014-5-14 22:20
小结一下:

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

明白了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马