各位:
try
{
try
{
...//code2
}catch(Exception e)
{
...
}finally
{
System.out.println( "error 2 ");
}
}catch(Exception e)
{
...
}finally
{
System.out.println( "error 1 ");
}
这是个简单的异常嵌套,我想知道:如果code2部分代码出现异常,控制台肯定能打印 error 2,但外层的finally部分代码会执行吗?此处会打印error 1吗?
------解决方法--------------------------------------------------------
finally当然会执行,但是外面的catch是不会进去的
------解决方法--------------------------------------------------------
如果code2不throw new Exception()的话,或者没有运行时异常,外层try catch不会捕捉,也就不会打印出 error 1
------解决方法--------------------------------------------------------
外层finally当然会执行,因为里面的try有问题,那么外面的try肯定会报有问题,如果里面的catch没捉到,外面的catch会再捕捉,不管怎样外层finally在上述原因下会执行
------解决方法--------------------------------------------------------
程序中 遇到 finally 就必须执行 不管他在什么位置
------解决方法--------------------------------------------------------
error1,error2都会输出
------解决方法--------------------------------------------------------
异常嵌套,
(1)如果内层发生异常,那么将由内层的catch进行捕获, 此时内层的catch和内层的finally和
外层的finally都会执行,而外层的catch则不会执行。而如果内层不能捕获,则内层的
finally还是会执行而且外层的catch和finally都会执行。
(2)如果外层发生异常,则外层的catch和finally都会执行。