在获得异常后从下一行继续

时间:2013-06-21 11:16:52

标签: java

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

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

现在假设我的语句A抛出异常,所以我想跳过它并继续使用B.不要给我的建议放入catch / finally块或任何其他解决方案。我只想知道这可能跳过并继续下一个声明

4 个答案:

答案 0 :(得分:9)

是的,没有finally阻止就可以了。

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

另一方面,我并不认为这很好。如果您设法达到需要这种流量控制的程度,您需要退后一步并重新考虑代码设计。

答案 1 :(得分:1)

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

答案 2 :(得分: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提供了有趣的解决方案:method references and 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) {

    }
}

答案 3 :(得分:-1)

就像darijan已经提到的那样,你可以将每一个语句都放入自己的try-catch中。或者,如果您知道可能导致异常的原因,您只需检查它是否可以执行您的陈述

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

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