黑马程序员技术交流社区

标题: java 异常 [打印本页]

作者: 边道坚    时间: 2013-3-20 11:15
标题: java 异常
本帖最后由 边道坚 于 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 11:37
异常也是逻辑的一部分,如果有异常抛出,没有捕获处理,那么就会抛出异常的逻辑层一层一层向外继续抛,如果到该程序的顶层,还没有逻辑处理异常,那么程序就会崩掉

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

楼主的第一个例子,其实也可以处理得更好,比如捕获下来,显示个错误的提示框显示错误信息,让应用程序正常终止不是更好么?否则用户就要去看log文件或控制台输出才知道原因
作者: 孙晋学    时间: 2013-3-20 11:42
java.lang.Exception
         |--- java.lang.RuntimeException
                      |---- java.lang.IllegalStateException
对于RuntimeException及其子类,不需要try{}catch{}或者throws声明抛出,运行时异常的子类
需要让程序停下来的,因为它表明程序出现的问题比较严重
作者: VOIDMAIN    时间: 2013-3-20 14:08
异常捕获不是程序逻辑的问题,大部分是在运行时可能出现的不预知情况,为了程序的鲁棒性,需要对任何可能出现异常(或者说不确定状态)的地方进行捕获,这样在大程序中,不至于因为一个小异常而让整个程序崩溃,而可能只是某个局部功能不正常,但是其他功能依然可以使用。
作者: 聂益飞    时间: 2013-3-20 16:05
因为能让程序直接停止的异常必须是RuntimeException的子类异常,而你的第二个异常抛出的Exception这个大类异常并不能让程序直接终止,需要throws声明或是try  catch处理!而RuntimeException异常可以直接抛出,不需要声明,也不需要处理!!




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