13

これは私がやろうとしていることです:

try {

    //code
} catch (Exception e) {

    return false;
} finally {

    //close resources
}

これは機能しますか?それは悪い習慣ですか?これを行う方が良いでしょうか:

boolean inserted = true;

try {

    //code
} catch (Exception e) {

    inserted = false;
} finally {

    //close resources
}

return inserted;
4

4 に答える 4

23

はい、そうなります。finally ブロックの実行 (AFAIR) を防ぐことができるのはSystem.exit()、 と無限ループ (そしてもちろん JVM クラッシュ) だけです。

于 2013-07-31T20:22:13.523 に答える
6

ブロックは、ブロックが最後に行うこととして、常に無条件finallyに実行されます。それに対して実行しても、通常の例外が発生したかのように、ブロックは実行されます。try-catch-finallyThread#stopfinally

それだけでなく、 から戻ったfinally場合、その戻り値はtryまたはからの戻りを踏みにじりますcatch

ところで、最初の例は問題ありませんが、優先されます。2 番目の例では、読者は変数への代入を追跡する必要があります。これは退屈な作業であり、バグが非常に簡単にすり抜けてしまいます。

于 2013-07-31T20:22:08.173 に答える
4

どちらもほぼ同じです。ただし、次の場合には注意してください。

int i = 0;

try
{
    //code
}
catch(Exception e)
{
    return i;
}
finally
{
    i = 1;
}

0返されるものです。

于 2013-07-31T20:24:09.263 に答える