本帖最后由 ok2ok2ok2 于 2011-05-08 10:09:33 编辑

解决方案 »

  1.   

    1. throws是往下一层抛异常,比如A有异常,但A不需要处理这个异常,则用throws,让程序在本阶段忽略异常处理。比如B调用了A, 如果B需要处理异常,就捕获处理,如果还不需要处理,就继续往下一个C抛。
    具体例子你可以参考三层结构。比如数据访问层有异常,但数据访问层不需要处理异常错误,它会把异常抛到业务罗阶层,让业务逻辑处理异常。这样容易分工。2. 不同的catch捕获不同的异常(比如空指针 ,下标越界等),然后在不同的catch中按不同情况,分别处理
      

  2.   

    1、再次throw,是为了不吃掉异常(不掩盖错误)。让其他调用者有机会处理该异常。
    2、某些语言允许不继承于Exception的异常,它们不是标准的.net异常(non-CLS-compliant exceptions),如果调用这种语言写的模块,用catch(Exception)不能捕获非标准异常。CLS:Common Language Specification 
      

  3.   

    1.实际上,在c#里,如果方法A不需要处理异常,并不需要用try...catch(){ throw;}这种方式,异常自动会一级级向外抛的。我体会用throw的一种情形是,各级方法需要对异常有不同的处理,比如:
    public void abc()
    {
       try
       {
          bcd();
       } 
       catch (Exception ex)
       {
          MessageBox.Show("出错"); 
       }
    }private void bcd()
    {
       try
       {//做些什么
       }
       catch (Exception ex)
       {
          //记入错误日志
          
           throw;
       }
    }
    比如方法bcd()是在数据库层,不能直接跟用户交互,只能记录错误日志,把显示出错信息的事交给方法abc去处理
      

  4.   

    如果当前的catch段不能处理,再抛出异常就会有其他的catch段捕获这个异常,新的catch段可能会处理这个异常