首页 > 解决方案 > 为什么 Java 有嵌套的 try 语句?

问题描述

我阅读了有关 nested- trystatements的内容catch,我不禁想知道使用 nested 的实际意义是try什么?内部的内容try已经在外部try,如果要捕获异常,外部try-catch将处理它。那么为什么要使用内部try呢?

例如:

代码 1:

try 
{
    Statement A;
    Statement B;
    try
    {
        Statement C;
        Statement D;
    }
    catch(CException e) { ... }
    catch(DException e) { ... }
}
catch(AException e) { ... }
catch(BException e) { ... }

代码 2:

try 
{
    Statement A;
    Statement B;

    Statement C;
    Statement D;
}
catch(AException e) { ... }
catch(BException e) { ... }
catch(CException e) { ... }
catch(DException e) { ... }

如果我错了,请纠正我,但上面的这两个代码片段不是执行相同的任务吗?

标签: javatry-catch

解决方案


您可以围绕内部尝试进行循环,以多次捕获异常而不退出循环。

try {
    for (int i = 0; i < 10; i++) {
        try {
            someOperationThatOftenFails();
        } catch (SomeCommonException e) {
            ...
        }
    }
} catch (SomeRareFatalException e) {
    ...
}

在这种情况下,嵌套的 try 块是唯一一种在SomeCommonException不退出循环的情况下多次捕获的方法,而且SomeRareFatalException在第一次发生时也会导致退出循环。


推荐阅读