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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 边道坚 中级黑马   /  2013-3-20 11:15  /  1613 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 边道坚 于 2013-3-20 17:49 编辑

第一种情况:
throw new IllegalStateException("Cannot execute task:"
                            + " the task is already running.");
在代码中直接抛出即可,如果遇到这类异常,程序会异常终止。
但是我们不需要try catch或者再次的throws。

第二种情况:
throw new Exception("Cannot execute task:"
                            + " the task is already running.");
为什么这种异常需要try catch或者再次的throws?

他们都是同一个异常父类,有什么不一样的吗?求教?

点评

如果你的问题已经得到解决,请及时将主题改为[已解决],如果还有问题请继续追问,谢谢  发表于 2013-3-20 12:29

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
异常也是逻辑的一部分,如果有异常抛出,没有捕获处理,那么就会抛出异常的逻辑层一层一层向外继续抛,如果到该程序的顶层,还没有逻辑处理异常,那么程序就会崩掉

理论上所有的异常都需要捕获~ 不应该有‘需要捕获’和‘不需要捕获’的异常。

楼主的第一个例子,其实也可以处理得更好,比如捕获下来,显示个错误的提示框显示错误信息,让应用程序正常终止不是更好么?否则用户就要去看log文件或控制台输出才知道原因

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
java.lang.Exception
         |--- java.lang.RuntimeException
                      |---- java.lang.IllegalStateException
对于RuntimeException及其子类,不需要try{}catch{}或者throws声明抛出,运行时异常的子类
需要让程序停下来的,因为它表明程序出现的问题比较严重
回复 使用道具 举报
异常捕获不是程序逻辑的问题,大部分是在运行时可能出现的不预知情况,为了程序的鲁棒性,需要对任何可能出现异常(或者说不确定状态)的地方进行捕获,这样在大程序中,不至于因为一个小异常而让整个程序崩溃,而可能只是某个局部功能不正常,但是其他功能依然可以使用。
回复 使用道具 举报
因为能让程序直接停止的异常必须是RuntimeException的子类异常,而你的第二个异常抛出的Exception这个大类异常并不能让程序直接终止,需要throws声明或是try  catch处理!而RuntimeException异常可以直接抛出,不需要声明,也不需要处理!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马