首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中将try-catch块嵌入try-catch块中

在Java中将try-catch块嵌入try-catch块中
EN

Stack Overflow用户
提问于 2012-10-29 07:10:33
回答 3查看 1.9K关注 0票数 1

假设我有方法a()和方法b(),这两个方法都可能抛出异常。在我的程序中,有一种情况是我必须至少调用其中的一个;我调用哪一个并不重要。但是,如果其中一个抛出异常,我必须调用另一个。如果它们都抛出异常,我就不需要做任何事情了。

我在考虑做这样的事情:

代码语言:javascript
复制
try {
    a();
catch (Exception e) {
    try {
        b();
    catch (Exception e) {

    }
}

但我认为如果要调用两个以上的方法,这将是不切实际的。所以我想知道有没有更优雅或者更好的方式来做我想做的事情。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-29 07:15:24

你可以的

代码语言:javascript
复制
    abc:
    {
        try
        {
            a();
            break abc;
        }
        catch(Exception e){}

        try
        {
            b();
            break abc;
        }
        catch(Exception e){}

        try
        {
            c();
            break abc;
        }
        catch(Exception e){}

    }

如果链条更长,可能会更好

代码语言:javascript
复制
for(int i=0; i<4; i++)
{
    try 
    {
        switch(i)
        {
            case 0: a(); break;
            case 1: b(); break;
            case 2: c(); break;
            case 3: d(); break;
        }
    }
    catch(Exception e){} // next
}
票数 2
EN

Stack Overflow用户

发布于 2012-10-29 07:15:43

您可以在每次成功后返回,这样在第一次成功之后,就会命中一个返回。

代码语言:javascript
复制
public void uponSuccessStop() {
    try {
        a();
        return;
    } catch (Exception e) {}
    try {
        b();
        return;
    } catch (Exception e) {}
    try {
        c();
        return;
    } catch (Exception e) {}
}

另一种选择是抛出异常,并使用短路布尔逻辑:

代码语言:javascript
复制
public boolean tryA() {
    try {
        a();
        return true;
    } catch (Exception e) {
        return false;
    }
}
// repeat for B and C

public void uponSuccessStop() {
    boolean succeeded = tryA() || tryB() || tryC();
}
票数 2
EN

Stack Overflow用户

发布于 2012-10-29 07:16:41

在这种概括性的级别上讨论实际的选项是困难的,但您可以这样做:

代码语言:javascript
复制
boolean succeeded = false;
try {
    a();
    succeeded = true;
} catch (Exception e) {
    // intentional ...
}
if (not succeeded) {
    try {
        b();
    catch (Exception e) {
        ...
    }
}

..。以及使用条件句(或breakreturn)来避免嵌套的所有其他类型的安排。

但他们是否更“优雅”..。或者更具可读性。将高度依赖于上下文。也依赖于阅读器。(作为一名经验丰富的Java程序员,理解嵌套异常并不困难。根据我的经验,旨在避免嵌套的人工构造可能会导致代码更难阅读/理解。)

我希望你不会真的去抓Exception ..。因为如果是这样的话,这是一个比try /catch嵌套更糟糕的问题!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13113966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档