代码改变世界

Java异常处理

2012-03-11 22:07  myjava2  阅读(274)  评论(0编辑  收藏  举报

 

异常处理—三种:

        1.       在出现异常的方法内捕获并处理异常,该方法的调用者将不能再次捕获该异常。(catch)

        2.       该方法签名中声明抛出该异常,将该异常完全交给方法调用者处理。(throw)

        3.出现异常的当前方法和该方法的调用者都要处理。(catch中加throw)

        catch和throw结合是在企业级应用对异常处理很常用,主要有两个部分:

           1.应用后台需要通过日志来记录异常发生的详细情况,

          2.应用还需要根据异常想应用使用者传递某种提示。

异常链:

         企业应用中,常有严格的分层,如下图

 

当业务逻辑层访问持久层出现SQLException异常时,程序不应该把底层的SQLException异常传递到用户界面,原因是:

        1.       对于用户而言,他们不理解SQLException,不友好

        2.       对于恶意用户而言,SQLException暴露出来是不安全的。

          所以把底层的原始异常传给用户是很不好的,通常情况下,程序先捕获原始异常,然后抛出一个新的业务异常,新的业务异常包含了对用户的提示信息,这叫做异常转译。

         这种把捕获一个异常然后接着抛出一个异常,并把原始异常信息保存下来是一种典型的链式处理—职责连模式,也称为“异常链”;

一,持久层的异常处理


 

二,业务逻辑层异常处理

自定义的异常类

Java的异常跟踪栈

         异常对象的printStackTrace方法用于打印异常的跟踪栈信息,根据printstackTrace方法输出结果,我们可以找到异常的源头,并可以看到异常一路触发的过程。

 

异常处理规则:

         使程序代码混乱最小化,捕捉并保留诊断信息,通知合适人员,采用合适的方式结束异常活动。

         不要过度使用异常处理,滥用会造成:

1.       把异常和普通错误混淆在一起不再编写任何错误处理代码,而是以简单地抛出异常来代替所有错误处理

2.       使用异常处理来代替流程控制。

不要使用过于庞大的try块,把大的try块分割成多个可能出现异常的程序段落,并把他们放在单独的try块中,从而分别捕获并处理异常。