попытаться поймать проблему, связанную с исключением - PullRequest
0 голосов
/ 03 марта 2011

У меня возникла проблема, связанная с исключением

У меня есть класс A, класс B, когда я вызываю какой-то метод класса B из класса A, который помещается в пару с блоком try catch, что происходит, когда происходитисключение в блоке try класса A. затем В следующих шагах после вызова метода класса 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 ]

2 голосов
/ 03 марта 2011
try{
    B b=new B();
    b.m1();
    b.m2();
}

Если m1 выдает исключение, m2 никогда не выполняется. Таким образом, невозможно, чтобы оператор catch показал исключение, которое выбрасывает m2, если m1 уже сгенерировал исключение.

1 голос
/ 03 марта 2011

Когда в методе 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()" );
  }
}
1 голос
/ 03 марта 2011

Нам нужно немного больше информации. Прежде всего, какой язык вы используете? Можете ли вы показать нам, как реализованы m1() и m2()? Как сказал @Sjoerd, m2() не будет выполняться, если блок try, содержащий m1 и m2, поймает исключение в m1.

Например, в Java попробуйте этот код:

public class A {
    public void foo() {
        try {
            B b = new B();
            b.m1();
            b.m2();
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            // Do something
        }
    }
}

public class B
{
    public void m1() throws Exception {
        throw new Exception("m1 exception");
    }

    public void m2() throws Exception {
        throw new Exception("m2 exception");
    }
}

public class Test {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        A a = new A();
        a.foo();
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...