問題タブ [try-finally]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JVMが最終的に同期されたブロック
Java仮想マシンの仕様とコンパイルされたコードを見ると、「同期された」ブロックがJavaでどのように実装されているかがわかります。次のコード:
...この擬似コードとほぼ同等です。
...1つの例外を除いて。
何らかの理由で、例外テーブルには2つのfinallyハンドラーが表示されます。例えば:
最初のハンドラーは私が期待する場所ですが、2番目のハンドラーは実際には最初のハンドラーのfinallyブロック用であり、例外をキャッチすると同じハンドラーを実行します。次の方法では、これをうまく視覚化できません。
なぜこれなのか誰か知っていますか?それがfinallyブロックだけの場合、テーブルの2番目のエントリはそこにありません。その上、すでに例外がスローされている場合、finallyブロックを再度実行したい理由はわかりません。
ありがとう、ブランドン
java - try-finallyブロックのfinallyの一部で例外がスローされたかどうかを検出します
コードの簡単な部分、いくつかの基本try-finally
ブロックについて簡単な質問があります。
私の主な質問は次のとおりです。ブロック間で情報を渡すために、いくつかのローカル変数をfinally
使用せずにブロックで例外がスローされることを発見できる方法はありますか?catch
catch
これが役立つ状況はほとんどありません。変数を設定するためだけに、醜い不要なブロックを追加したくありませんthrow Exception
。最初の例は、Springまたはコンテナー管理のトランザクションメソッドを使用していて、try
ブロックException
が発生した場合です。finally
その場合、データベースを操作するために新しいトランザクションを作成する必要があります。2番目の例は、ブロックにスローされてオリジナルException
がマスクされたくない場合ですが、存在しない場合は、(存在する場合は)スローします。Exception
finally
Exception
finally
私はそれがすべてできることを知っていますcatch
が、他の方法、Javaのメタデータまたは他の何かがありますか?また、これが1つで実行されると想定できる場合は役立つ可能性があるThread
ため、現在の例外に制限されている例外を検出する方法があるかもしれませんThread
。
java - このように try/finally 句をネストしても安全ですか?
これは、try/finally 句の動作に関するやや学術的な質問であるため、非常に一般的な例を使用しようとしました。このように try/finally 句をネストすることに危険はありますか?
closeCursor()
具体的には、が before で呼び出されることが保証されているかどうかを知りたいですcloseDatabaseConnection()
。悪い習慣と見なされるように、finally 句をネストする理由はありますか?
java - 最終的にtry-finallyでスレッドが終了するのを待つ方法は?
Swing ベースのデスクトップ アプリケーションで JPA を使用しています。これは私のコードがどのように見えるかです:
try - catch - finally
トランザクションを必要とするすべてのメソッドにこれを使用しています。を持つメソッドを除いて、期待どおりに機能していSwingUtilities.invokeLater()
ます。
finally
新しいスレッドのすべてのコードが実行される前に到達します。したがって、 内SwingUtilities.invokeLater()
に JPA 操作がある場合、トランザクションがコミットされているため失敗します。
try - catch - finally
内部のコードを含むすべてのコードが実行された後にのみトランザクションがコミットされることを確認するために従うことができる一般的なユースケースはありSwingUtilities.invokeLater()
ますか?
java - Javaでtry-finallyを使用することをお勧めしますか?
私は今日、このようなコードを持っている小さな問題に遭遇しました。それは私を少し不快にさせました...
このような実装は、で例外が発生し、try
それを処理する呼び出し元に再スローされるという点で優れた方法であるかどうか疑問に思います。これは以下のコードと同等ですか?