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中的异常处理不理解.
{
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中的异常处理不理解.
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。