最終的にJavaは、プログラムが他の方法で終了するかどうかにかかわらず、プログラムがトライブロックに入ると、試してみると使用されます説明する例:
Public AndFinallyTest {public static void main(string [] args)try {int a = testfinally(2); ){int b = system.out.println( "rurned" +b); b)b = system.out.println( "+b); :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::づ 火::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::づ 火::::: :::::::::::::::::::::::::::プログラムが例外をスローするかその他の中断をスロートするかをスコープしてください。 {ケース1:++ I; //プログラムは通常、新しい例外をスローします(「I = "+flag);
実行結果は次のとおりです
I = 2がi = 1のときにi = 2 inが来るときに最終的に来るb:2 finallyがi = 3ブレイクが戻ると結果が得られます。
結果は、上記の状況が何であれ、最終的にブロックが常に実行されることを示しています。
他の言語モデルと比較して、最終的にキーワードはJava例外処理モデルへの最適な追加です。最終的な構造により、例外が発生するかどうかに関係なく、コードは常に実行できます。最終的に使用して、オブジェクトの内部状態を維持し、非メモリリソースをクリーンアップします。 最終的には、コードが混乱します。たとえば、次のコードでは、最終的に使用せずに非メモリリソースを無料で使用するためにコードを作成する方法を示しています。
import java.net。*; .accept();
このコードはソケットを作成し、受け入れメソッドを呼び出します。メソッドを終了する前に、リソースの脆弱性を回避するためにこのソケットを閉じる必要があります。このタスクを達成するために、メソッドの最後のステートメントである// 2に近いと呼びます。しかし、Tryブロックで例外が発生した場合はどうなりますか?この場合、// 2のクローズコールは起こりません。したがって、この例外を再発行する前に、この例外をキャッチし、// 1を閉じるために別の呼び出しを挿入する必要があります。これにより、メソッドを終了する前にソケットが閉じられます。
このようなコードを書くことは面倒でエラーが発生しやすいですが、最終的には不可欠です。残念ながら、最終的にメカニズムのない言語では、プログラマーはこの方法でコードを整理するのを忘れて、リソースの脆弱性をもたらす可能性があります。 Javaの最終的な条項は、この問題を解決します。最後に、以前のコードを次の形式に書き換えることができます。
import java.net。*; .accept(); //ここで...}
最終的なブロックは、TRYブロック内で例外が発行されるかどうかに関係なく、緊密なメソッドが常に実行されることを保証します。したがって、メソッドを終了する前に、緊密な方法が常に呼び出されることが保証されます。このようにして、ソケットが閉じられており、リソースが漏れていないことを確認できます。この方法では、別のキャッチブロックは必要ありません。キャッチブロックは、ソケットを閉じるためだけに最初の例で提供されますが、これは最終的に閉じられています。キャッチブロックを提供すると、キャッチブロックが終了した後に最終的なブロックのコードが実行されます。
最終的なブロックは、トライまたはトライ/キャッチブロックで使用する必要があります。さらに、最終的なブロックを実行せずにTryブロックを終了することはできません。最終的にブロックが存在する場合、常に実行されます。 (このステートメントはその観点からは正しいです。最終的なブロックを実行せずにTryブロックを終了する方法があります。コードがSystem.Exit(0)を実行する場合、TRYの内部では、アプリケーションが最終的に実行されずに終了します一方、トライブロックの実行中に電源を切る場合、最終的にも実行されません。