xu506075418 2010-05-17 21:47 采纳率: 0%
浏览 216
已采纳

请问大家一个异常处理的问题,异常该怎么处理比较好啊

我看很多程序在catch到checked异常后,都用unchecked异常包装下再次抛出,比如
try {
...
} catch (SQLException) {
throw new RuntimeException(e);
}
我不知道这样设计有什么好处,这样抛出去后,调用者不是也不知道该如何处理吗,那要抛出去干嘛呢
谢谢,请大家详细的讲解下异常处理的比较好的方案好吗,谢谢,希望多说点

  • 写回答

1条回答

  • 拽拽的初行者 2010-05-18 08:09
    关注

    [color=blue][b] 包装成Unchecked的异常,然后抛出,这样做后面的操作不用再捕获异常了。常用于后面的操作对前面的成功或者失败,虽然很关心,但是不知道具体如何处理。

    上面那个例子,应该这样:[/b]
    [/color]
    [code="java"]try {
    ...
    } catch (SQLException)
    // 回滚操作
    throw new RuntimeException(e);
    } [/code]
    [b]
    [color=blue]该操作保证了数据库中数据的一致性。当操作发生错误时,很可能整个线程就结束了。[/color]

    对于异常的处理,要根据实际的需要:
    [color=blue]
    一般情况下,要么返回个true或者false给上层调用者,要么抛出一个检查的异常给上层,使得上层可以做出正确的决策。比如DAO层,一般要在异常后,进行回滚,然后再抛出一个异常,然后Service层知道有异常发生。

    如果上层对下层的结果不敏感,则可以隐藏掉异常,即catch之后,不做任何处理。

    如果上层对下层的结果虽然敏感,但是又不知道怎么处理,那么就包装成Unchecked的异常,然后抛出。这样,整个线程,就会终止(因为不知道怎么处理,所以就留给JVM处理了)[/color][/b]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码