1

我想继续生成错误的下一行,

try{
    statement A;
    statement B;
    statement C;
}
catch(NullPointerException NPE){.....}

现在假设我的语句 A 抛出异常,所以我想跳过它并继续 B。不要提出我的建议,即放入 catch/finally 块或任何其他解决方案。我只想知道这是否可以跳过并继续下一条语句

4

4 回答 4

9

是的,没有finally块是可能的。

try{
    statement A;
}
catch(NullPointerException NPE){.....}
try{
    statement B;
}
catch(NullPointerException NPE){.....}
try{
    statement C;
}
catch(NullPointerException NPE){.....}

顺便说一句,我真的不认为这很好。如果您设法达到需要这种流控制的地步,您需要退后一步,重新考虑您的代码设计。

于 2013-06-21T11:18:09.093 回答
1

如果 A 抛出异常,则无法执行语句 B。一种方法是单独尝试/捕获块,另一种方法是将其他行放入 finally 块中。

于 2013-06-21T11:22:53.450 回答
1

如果您的语句相似并且可以参数化,请使用循环:

for (int i = 0; i < statementCount; i++) {
    try {
        /** do what you need */
    } catch(Exception e) {

    }
}

如果需要更多参数,或者将其放在单独的方法中:

public static void main(String[] args) {
    for (int i = 0; i < statementCount; i++) {

    }
    execute(params);
}

public void execute(Object... objects) {
    try {
        doSomthing(objects[0], objects[1]);
    } catch(Exception e) {

    }
}

如果语句完全不同,Java 8 提供了有趣的解决方案:方法引用和 lambdas。所以你可以像这样玩arround:

public static void main(String[] args) {
    execute(someObject, YourClass::method);
}

public void execute(Object param, Function<Object, Void> function) {
    try {
        function.apply(param);
    } catch(Exception e) {

    }
}
于 2015-03-05T21:58:36.033 回答
-1

就像 darijan 已经提到的那样,您可以将每条语句放入自己的 try-catch 中。或者,如果您知道可能导致异常的原因,您可以在执行语句之前简单地检查它

try{
    if(parameterForStatementA != null) {
        statementA;
    }
    if(parameterForStatementB != null) {
        statementB;
    }
    if(parameterForStatementC != null) {
        statementC;
    }
} catch(Exception e) {
    // something unexpected happened
}

验证参数通常比捕获抛出的异常更有效

于 2013-06-21T11:34:50.107 回答