3

私は比較的新しく、Javaまだ基礎を理解しようとしています。try-catch私はステートメントの形で例外処理について学んでいます。これらは問題なく、どのように、そしてなぜそれらを使用する必要があるかを理解しています。私を混乱させたのは、try-finallyステートメントです。

catchより具体的に言うと、ステートメントを使用して同じことを実行できない理由がわかりません。finally同じステートメントをステートメントに入れるのではなく、いくつかのコマンドをステートメントに入れることを選択する利点は何catchですか? ステートメントはまったく同じ方法で実行されませんか?

これがばかげた、または素朴な質問である場合は申し訳ありません。finallyステートメントを使用する利点を完全に理解することはできません。

4

6 に答える 6

10

catch:何かがうまくいかないとき。
finally: 何かがうまくいかないとき。
例外がスローされるかどうかに関係なくデータベース接続を閉じたい場合のように、そのような場合finallyはコードを配置するのに最適な場所になります。
また、冗長なコードを含む複数の catch ブロックがある場合は、冗長な部分をfinallyブロックに移動できます。

于 2012-06-17T14:00:01.673 に答える
4

catch ステートメントは常に実行されるわけではありません。finally ステートメントは確実に実行されます。例: ストリームを閉じる必要がある場合。

于 2012-06-17T13:59:10.720 に答える
2

finally例外がスローされたかどうかに関係なく、ブランチが実行されます。分岐は、指定された例外がブロック内からスローされたcatch場合にのみ実行されます。try

通常、完全に成功したかどうかに関係なく、ブロックfinallyのおよびでリソースが適切に解放されている(たとえば、開いているファイルが閉じられている)ことを確認したい場合に使用します-これは、ブロックが成功した場合、またはいずれかのブランチが実行された場合だけでなく、ブロックにリストされていない例外がスローされた場合にも実行されます(たとえば、チェックされていない例外またはランタイムエラー)trytryfinallytrycatchcatch

于 2012-06-17T14:05:01.117 に答える
2
try {
    //...
} catch(SomeException ex) {
    //code to execute if exception occurs
} finally {
    //code to execute no matter whether the exception occured or not
    //usually you put code to close resources here so that in any condition the
    //resources are released back to the system
}
于 2012-06-17T14:06:11.917 に答える
1

例外が発生するかどうかにかかわらず、finally ブロックは常に実行されます。一方、catch ブロックは、キャッチ可能な例外が発生するかスローされた場合にのみ実行されます。

例外は、そのクラスが catch ステートメントで作成された定義 (の 1 つ) と一致する場合、 「キャッチ可能」です。例:

catch(AnException ex | AnOtherException ex2) {}

AnExceptionタイプorの例外のみをキャッチしますAnOtherException (JSE7 のタイプミスであることに注意してください)

の実行順序に関する JSL を読むことをお勧めしますtry-catch-finally statement。これにはすべての詳細が含まれています。

JDK7以降、リソースfinallyを解放する(つまり、メソッドを使用する)ためによく使用されることに注意してください。リソースを自動的に閉じるtry-with-ressourceステートメントを使用できます。これは、 AutoCloseableを実装するクラスで機能します。close()

于 2012-06-17T14:10:52.430 に答える
0

TryCatch(Exception e)特定の例外を対象とし、finallyステートメントを実行します。

于 2012-06-17T14:01:05.677 に答える