日期:2014-05-20  浏览次数:20847 次

java捕获异常嵌套的问题
各位大虾:
    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都会执行。