简单的try-catch块,但要求复杂

时间:2014-01-10 10:01:55

标签: java exception for-loop try-catch

这是一个非常基本的问题,我想知道我该怎么做。 考虑下面的示例代码。这不是原始代码。我希望实现类似概念的复杂代码

for (i = 0; i < 5; i++) {
    System.out.println(i);
    try {
        accountoutlist = accountstub.accountUpdate(accountinlist);
    } catch (Exception e) {
        System.out.println("Error Occurred: " + e);
    }
}

我希望每当异常发生时,程序应该继续使用for循环。 输出应该是。 用短语“如果发生异常,则忽略它并继续for循环”

这就是输出应该是什么样的,假设在6.Wish Java之后发生了异常,那么它有像BASIC语言这样的GOTO语句

0
1
2
3
Error Occured
4

如果第一部分非常简单,那么只有当异常错误(e)出现

时,我才会喜欢这个(要忽略的例外)
Error Occured: Update operation on integration component 'Account' failed because no
matching record in business component 'Account' with search
specification '[Id] = "ALEA-2KXVN0"' could be found.(SBL-EAI-04403)

5 个答案:

答案 0 :(得分:0)

Java将goto作为保留字,但未使用它。

所以你不能用goto做到这一点。 我假设你在catch块之后有更多的语句。

所以你可以这样做:

在循环之前声明一个布尔标志error

将其设置为false作为循环中的第一行。 在catch块中将其设置为true

在try-catch块之后(在你需要的任何行),执行以下操作:if (error) continue;

答案 1 :(得分:0)

如果异常不匹配(例如使用字符串beginsWith()方法检查),则再次在catch中抛出异常。如果你的try-catch在循环中,那么除非你再次抛出异常,否则循环将自动继续。

最好只捕获所需的特定异常类型(例如NoMatchingRecordException,而不是捕获所有Exception

答案 2 :(得分:0)

检查出来:

    for (int i = 0; i < 5; i++) {
        System.out.println(i);

        try {
            accountoutlist = accountstub.accountUpdate(accountinlist);
        } catch (Exception e) {
            // Ignore
            System.out.println("Error Occurred: " + e);
            // Skip perfroming further operations. Continue to the next record
            continue;
        }

        // Further operations on the data.
    }

答案 3 :(得分:0)

验证捕获的异常消息,如果错误对您重要,则重新抛出

for (i = 0; i < 5; i++) {
    System.out.println(i);
    try {
        accountoutlist = accountstub.accountUpdate(accountinlist);
    } catch (Exception e) {
        if (e.getMessage().equals("Error Occured: Updat....")) {
            throw e;
        } else {
            System.out.println("Error Occurred: " + e);
        }
    }
}

但总的来说,更好的是使用异常层次结构并将致命错误与可忽略的错误分开。

答案 4 :(得分:0)

我冒昧地修改了你的代码,以便让Java新手更容易理解。

因此,您应该在for语句之前放置一个标签,然后在catch块内部将一个continue语句放到相应的标签上:

int i;
ArrayList<Integer> arrayList = new ArrayList<Integer>();
returnPoint:for (i = 0; i < 5; i++) {
    System.out.println(i);
    String buggedPoint = null;
    try {
        if(i == 3) {
            buggedPoint = "bugged";
            arrayList.add(Integer.valueOf(buggedPoint));
    }
    arrayList.add(i);
    } catch (Exception e) {
        System.out.println("Error Occurred: " + e);
        continue returnPoint;
    }
}

输出:

0
1
2
3
Error Occurred: java.lang.NumberFormatException: For input string: "bugged"
4

另请参阅http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html

中的ContinueWithLabelDemo