public class Test
{
public static void main(String arge[])
 {
 try
  {
    mb_method();
   }
  catch (Exception e)
  {
   System.out.println('m');
   }
  System.out.println('n');
 }
 static void mb_creatException()
 {
  throw new ArrayIndexOutOfBoundsException();
  }static void mb_method()
 {
  try
  {mb_creatException();
   System.out.print("a");  
  }
  catch(ArithmeticException e)
 {
   System.out.print("b");
 }
 finally
 {
   System.out.print("c");
  }
 System.out.print("d");
}
}
这段代码的运行结果是:cm
                     n请教高手这段代码是怎么走的,为什么得到这个结果.对java中的异常处理不理解.

解决方案 »

  1.   

    主函数调用mb_method;
      mb_method调用mb_creatException;
        mb_creatException抛出的异常ArrayIndexOutOfBoundsException;
        exception传出mb_creatException,控制回到mb_method;
      但mb_method中的catch块所监听的异常是ArithmeticException,不匹配,catch块并示执行;
      但mb_method中跟跟try所对应的finally块在离开mb_method之前是必然执行的,于是打印出c。
    控制回到主函数main,原来的异常被main中的catch(Exception e)捕获,打印出m(换行)。
    直到现在,异常才得已处理。
    异常处理结束,程序继续执行,打印出n。