尝试,捕捉异常相关的问题

时间:2011-03-03 10:07:03

标签: c# exception-handling

我有一个与例外相关的问题

我有A级,B级 当我从A类调用B类的一些方法时,它与try catch final block配对 那么当A类的try块出现异常时会发生什么 在调用B类方法之后的下一步中,也有一个例外, 但它显示最近的异常 我的意思是它覆盖了B类方法m2()的第一个例外。 我仍然没有意识到首先出现的实际异常。

Class A
{
    try{
        B b=new B();
        b.m1();
        b.m2();
    }
    catch(Exception ex)  // in catch block here what happens it display the b.m2() exception not the
                      b.m1() exception, while i was thinking it should display first exception
                      when it is calld at m1(); Why so ?
    {
        throw;
    }
    finally{}
}

class B
{
    try
    {
        m1(){}; //here comes exception
        m2(){}; // it also throw some exception
    }
    catch(Exception ex)
    {
        throw;
    }
    finally
    {
    }
}

3 个答案:

答案 0 :(得分:2)

try{
    B b=new B();
    b.m1();
    b.m2();
}

如果m1抛出异常,则永远不会执行m2。因此,如果m1已经抛出异常,则catch语句不可能显示m2抛出的异常。

答案 1 :(得分:1)

我们需要更多信息。首先,您使用的是哪种语言?您能告诉我们m1()m2()的实施方式吗?与@Sjoerd一样,如果包含m2()try的{​​{1}}块在m1中捕获到异常,则m2将无法执行。

例如,在Java中,请尝试以下代码:

m1

答案 2 :(得分:1)

当方法m1中出现(未捕获)异常时,m2将永远不会被调用。要了解,为什么它不适用于您的情况需要更多信息。它只是不可能,m1在你的例子中抛出异常。

我做了一个类似于你的例子,它显示了预期的行为:

public class ExceptionCatchExample
{
  public static void main( String[] args )
  {
    new ExceptionCatchExample();
  }

  public ExceptionCatchExample()
  {
    Controller c = new Controller();

    try
    {
      c.doMethod1();
      c.doMethod2();
    }
    catch ( Exception ex )
    {
      System.out.println( " Error: " + ex.getMessage() );
    }
  }

}

class Controller
{
  public void doMethod1() throws Exception
  {
    System.out.println( "doMethod1()" );
    throw new Exception( "exception in doMethod1()" );
  }

  public void doMethod2() throws Exception
  {
    System.out.println( "doMethod2()" );
    throw new Exception( "exception in doMethod2()" );
  }
}