[解決済み] 新しいExceptionを投げても、finally blockは実行されるのでしょうか?
2022-04-24 08:28:39
質問
このコードでは
someVar
キャッチブロックが実行され、2つ目の例外が発生した場合でも、設定されるのでしょうか?
public void someFunction() throws Exception {
try {
//CODE HERE
} catch (Exception e) {
Log.e(TAG, "", e);
throw new Exception(e);
} finally {
this.someVar= true;
}
}
どのように解決するのですか?
そう、finallyブロックは常に実行される...時を除いて。
- try-catch-finallyブロックを実行しているスレッドがkillされるか、割り込まれる。
-
を使用します。
System.exit(0);
- 基盤となるVMが他の方法で破壊される
- 基盤となるハードウェアが何らかの理由で使用不能になった
さらに、finallyブロック内のメソッドがキャッチできない例外をスローした場合、それ以降は何も実行されません(つまり、他のコードと同じように例外がスローされます)。このようなことが起こるのは、非常によくあるケースです。
java.sql.Connection.close()
.
余談ですが、今回のコードサンプルは単なる例だと思われますが、finallyブロックの中に実際のロジックを入れるのは注意が必要です。finallyブロックはリソースの後始末(DB接続の終了、ファイルハンドルの解放など)のためのものであり、必ず実行しなければならないロジックのためのものではありません。もし実行しなければならないのであれば、try-catchブロックの前で、例外を投げる可能性のあるものから遠ざけてください。
関連
-
スタイルが読み込まれず、ブラウザコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
-
[解決済み] Pythonの関数が例外を投げるかどうかをテストするにはどうすればよいですか?
-
[解決済み] Javaにおける例外処理によるパフォーマンスへの影響とは?
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
-
[解決済み】C#で例外をキャッチして再スローする理由とは?
-
[解決済み】finallyブロックが例外をスローした場合はどうなりますか?
-
[解決済み】catchブロックの中で投げられた例外は、再度キャッチされますか?
-
[解決済み】例外が発生しないのにtry-catchブロックを使うのは高くつく?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルが読み込まれず、ブラウザコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
スレッド "main "での例外をEclipseで解決 java.lang.Error: 未解決のコンパイル問題、コンパイラとパッケージの不整合
-
eclipse アクセス制限です。タイプ 'xxx' は API ではありません(必須ライブラリ '' の制限)。
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
xxx:jarのアーティファクトディスクリプタの読み込みに失敗した問題は解決しました。
-
spring-boot 401 このリソースにアクセスするには完全な認証が必要です エラー解決
-
javaコンパイル時のエラー:不正な文字 '\ufeff' に対する解決策です。
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
テストが見つかりませんでした