このコードでは、someVar
catch ブロックが実行され、2 番目の例外がスローされた場合でも設定されますか?
public void someFunction() throws Exception {
try {
//CODE HERE
} catch (Exception e) {
Log.e(TAG, "", e);
throw new Exception(e);
} finally {
this.someVar= true;
}
}
ベストアンサー1
はい、finally ブロックは常に実行されます...ただし、次の場合は除きます:
- try-catch-finallyブロックを実行しているスレッドが強制終了または中断される
- あなたが使う
System.exit(0);
- 基盤となるVMが何らかの方法で破壊される
- 基盤となるハードウェアが何らかの理由で使用できない
さらに、finally ブロック内のメソッドがキャッチされない例外をスローした場合、それ以降は何も実行されません (つまり、他のコードの場合と同様に例外がスローされます)。これが発生する非常に一般的なケースは ですjava.sql.Connection.close()
。
余談ですが、あなたが使用したコード サンプルは単なる例だと思いますが、finally ブロック内に実際のロジックを配置する場合は注意してください。finally ブロックはリソースのクリーンアップ (DB 接続の終了、ファイル ハンドルの解放など) を目的としており、実行必須のロジック用ではありません。実行必須の場合は、例外をスローする可能性のあるものから離れた try-catch ブロックの前に実行してください。意図は機能的にほぼ間違いなく同じです。