2011-03-03 4 views
0

私は試して、キャッチ例外関連の問題

は私が持っている例外に関連する問題が発生しているクラスA、クラスB やってみキャッチ最終ブロック と対に置かれたクラスAからクラスBのいくつかの方法が呼び出しますその後、何 、例外はそれらの次のステップで は、クラスBのmehodを呼び出した後、その後、クラスAのtryブロックでそこに来たときに、例外があまりにもそこに来て起こったが、それは最初の例外を上書き私が意味する、最近の例外 を表示クラス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 
    { 
    } 
} 
+0

これは何語ですか?言語を示すタグを追加する必要があります。また、コードを適切にインデントする必要があります。 –

+0

それは 'asp.net、私はしばらくしてから編集部分にコードを投稿します。 – NoviceToDotNet

答えて

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

m1が例外をスローした場合、m2が実行されることはありません。したがって、m1が既に例外をスローした場合、catchステートメントでm2がスローする例外が表示されることはありません。

+0

thats非常に奇妙な、私は同じ苦境に陥っています – NoviceToDotNet

1

私たちは、もう少し情報が必要。まず第一に、どの言語を使用していますか?あなたはm1()m2()が実装されている方法を私たちを見ることができますか? @Sjoerdが言ったようにtryブロックがm1m1m2キャッチ例外を含む場合、m2()は実行されません。例えば

、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(); 
    } 

} 
1

方法m1の中(uncatched)例外が発生した場合、その後、m2が呼び出されない飽きないだろう。調べるには、なぜあなたのケースでは動作しませんより多くの情報が必要です。あなたの例では例外がスローされます。

私が期待される動作を示しており、あなたのようなまね例を作った:

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()"); 
    } 
}