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 を実行することはできません。1 つの方法は個別に try/catch ブロックを作成する方法で、もう 1 つの方法は他の行を 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 はメソッド参照とラムダという興味深い解決策を提供します。したがって、次のようなもので遊ぶことができます:

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 に答える