这个系统比较大,涉及的方方面面内容也比较多.这里的异常处理是个关键.我这方面接触的少,这里大家都是高手,请大家提提建议吧. 
如何建立一个完善的异常处理机制.我相信是任何一个健壮的系统所必备的. 
谢谢

解决方案 »

  1.   

    定义总异常类,往下有很多分支,命名很重要,起码如果抛出异常了你能知道什么地方出错的,或者直接在catch中输出出错信息算了,这样不容易遗漏可能出错的地方
      

  2.   

    可以通过继承runTimeException来建立自定义顶级异常类然后通过具体的业务,设置具体的异常代码然后转向自己的异常页面
      

  3.   

    你的需求应该是希望异常处理的方法是可配置的,对吧初步想法可以使用监听器
    有异常被抛出,也可以视为有消息产生
    可以参照awt,swing的消息处理机制interface ExceptionListener
    {
        exceptionPerformed(Exception e) 
    }class A
    {
          ExceptionListener listner;
          setListener(ExceptionListener listner);
          try{
                doSome();
          }catch(Exception e){
                  listner.exceptionPerformed(e);
          }
    }然后就是编写一些以不同方法去实现ExceptionListener接口的监听类在你需要的情况下A.setListener()不同的监听实现类即可
      

  4.   

    配合spring这些控制反转的框架,就更方便了
      

  5.   

    上面的想法,我又考虑了一下,还有些缺陷,
    因为编写A类或使用了A类的程序员就要去考虑A类的异常用哪个监听类我的另外一个想法,在监听器的同时,参照log4j
    log4j是可配置消息输出方式的框架那你设置一个总的exception处理类这个类中
    有一个被监听类名;
    有一种(或几种)异常处理方法
    还有一个异常处理对应表class ExceptionPerformer{
           String  targetName;
           ExceptionListener  listener;
           public ExceptionPerformer(String targetName)
           {
                     listener=parseListenersMapFromConfig(targetName);
            }
            parseListenersMapFromConfig(String targetName)
            {
                  String listenerClassName=....;
                  listener=Class.forName(listenerClassName).newInstens();
            }
           exceptionPerformed(Exception e) 
           {
                    listener.exceptionPerformed(e);
            }
            
    }然后要处理异常的类就只需要performer.exceptionPerformed(e);
    class A
    {
          static ExceptionPerformer performer=new ExceptionPerformer(this.getName());
          
          try{
                doSome();
          }catch(Exception e){
                  performer.exceptionPerformed(e);
          }
    } 这样,我要使用A类,我就不需要去考虑给A类set一个什么listener了那剩下的就是配置文件的格式和处理配置文件的方法
    然后编写一大堆listener实现类配置文件类似于:
    targetName1=a1
    listener1=l1targetName2=a2
    listener2=l2targetName3=a3
    listener3=l3你也可以把ExceptionPerformer的exceptionPerformed方法分成几种,
    什么alarm()了,iDontCare()了,等等大体框架意思就是这样了,细节方面留给楼主考虑下吧
      

  6.   

    不过好像使用spring之后,使用A类的时候也不需要考虑set什么listener了,呵呵spring不是太熟
      

  7.   

    上面说的都可以,还有一种方式,就是自己在每个对应的类中定义对应的异常类,然后发现异常的时候抛出该异常。使用threw new 异常类(exception)。
      

  8.   

    其实我的那个应该也就是个单入口模式 
    单入口,就是统一使用一个入口
    那么入口统一了之后
    你所需要的问题就是怎么在这个入口里处理进来的这些异常在没有oo的时候不过是已串长长的
    switch  case 罢了
    当然,如果你问的是如何处理得oo,他的回答是简单了些
    不过考虑下我的想法吧,期待你的实现;
      

  9.   

    最近也在考虑这个问题,系统越来越大,是应该有一个完善的异常处理机制这里,我也期待大家能给出非常具体的解决方案,同时提一下我自己的想法:在我看来,有些异常是用户的输入导致的,这些异常应该在最底层捕获时转换成用户定义的异常类,如UserErrorException
    然后一层层往外抛,直到返回给用户错误提示,
    另一些是程序不够健壮引起的缺陷,可预测的并且可处理的,在捕获后应该做一些补救措施,不可预测的应该在最外层捕获后记录日志,
    并返回给用户友好的提示,如“程序缺陷引起bug,请联系管理员”等。个人想法,不知对错,欢迎批判并进步。