[解決済み] try-finallyとtry-catchの違いについて
2022-03-08 14:01:08
質問
とはどう違うのですか?
try {
fooBar();
} finally {
barFoo();
}
そして
try {
fooBar();
} catch(Throwable throwable) {
barFoo(throwable); // Does something with throwable, logs it, or handles it.
}
私は2番目のバージョンの方が、Throwableにアクセスできるので好きです。この2つのバリエーションには、論理的な違いや好ましい規則があるのでしょうか?
また、finally節から例外にアクセスする方法はありますか?
どのように解決するのですか?
この2つは別物です。
- catchブロックはtryブロックの中で例外が発生した場合のみ実行されます。
- finally ブロックは、例外が発生したかどうかにかかわらず、try(-catch) ブロックの後に常に実行されます。
あなたの例では、3つ目の可能な構成が示されていません。
try {
// try to execute this statements...
}
catch( SpecificException e ) {
// if a specific exception was thrown, handle it here
}
// ... more catches for specific exceptions can come here
catch( Exception e ) {
// if a more general exception was thrown, handle it here
}
finally {
// here you can clean things up afterwards
}
また、@codeca さんのコメントにあるように、finally ブロックの中では例外にアクセスする方法がありません。finally ブロックは例外が発生しなくても実行されてしまうからです。
もちろん、ブロックの外で例外を保持する変数を宣言し、catchブロックの中で値を代入することは可能です。もちろん、ブロックの外で例外を保持する変数を宣言し、catchブロックの中で値を代入することも可能だ。
Throwable throwable = null;
try {
// do some stuff
}
catch( Throwable e ) {
throwable = e;
}
finally {
if( throwable != null ) {
// handle it
}
}
関連
-
[解決済み] アクティビティに割り当てられない
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] Try-catchは私のコードをスピードアップさせるか?
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] JDKとJREの違いは何ですか?
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
-
[解決済み】HashMap、LinkedHashMap、TreeMapの違いについて
-
[解決済み】try {...} finally {...} は良くて、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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Jdbctemplate の文字列に対するクエリです。EmptyResultDataAccessException: 不正な結果サイズ:期待値1、実際0
-
[解決済み] Eclipse デフォルトのフォント名
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] android.support.v4.app.FragmentActivity' で 'TAG' がプライベートアクセスされている。
-
[解決済み] ファイルを作成せずに、ファイルが存在するかどうかをチェックする
-
[解決済み] eclipseからTomcatに物理的に発行されるmyjspはどこにあるのでしょうか?
-
[解決済み] java.lang.ClassCastException: java.lang.Long を java.lang.Integer にキャストできない(java 1.6
-
[解決済み] Eclipseでクラスとそれに対応するファイルの名前を変更する方法は?
-
[解決済み] Maven: assembly-pluginが全く実行されない