我有一个与例外相关的问题
我有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
{
}
}
答案 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()" );
}
}