ファイナル:
Finalは、メンバー、方法、またはクラスを上書きするか継承できるかを制御できます。
クラスで変数を定義する場合、最終的なキーワードを追加します。これは、この変数が初期化されると、その値が基本的な変数に不変であることを意味します、それらの参照をもう変更することはできません。その初期化は2つの場所にあります。1つはその定義であり、もう1つはコンストラクターでは2つのうちの1つだけを選択できるということです。
次のプログラムは、単に最終的な使用法を実証しています。
パブリッククラステスト{最終的な値を指定するとき、または(2つのうち1つのみが選択できます){t = 3;
別の使用法は、基本タイプの変数の場合、メソッドのパラメーターを最終的なものとして定義することです。 。オブジェクト変数をメソッドのパラメーターとして変更する必要がない場合、finalを明示的に使用することが宣言されます。これにより、意図せずに呼び出しメソッドが変更され、影響を与えることができなくなります。
さらに、インナークラスのメソッドでパラメーター変数を使用する場合、次のコードに示すように、このパラメーター変数を使用する前に最終的に宣言する必要があります。
パブリッククラステスト{final string str){class Innertest(){system.out.println(str)} InnertEST IT = new Inrertest(); {test test = new test.print( "Hello Word !!!}}
最終的な方法が最終的な方法として宣言する理由は2つあります。このクラスから継承されますが、継承はまだこの方法を継承できます。つまり、直接使用できます。 2番目は、コンパイラがこのメソッドへのすべての呼び出しをインライン(インライン)呼び出しに変換できるようにするメカニズムです。 。したがって、ファイナルを使用してメソッドを慎重に定義する必要があります。
ファイナルクラスクラスでファイナルを使用する場合、最終クラスは誰にも継承できないため、慎重に考える必要があります。つまり、このクラスは継承ツリーのリーフクラスであり、このクラスはデザインが完璧であると考えられています。変更または拡張。最終クラスのメンバーの場合、ファイナルまたはファイナルではないものとして定義できます。方法の場合、クラスはファイナルに属しているため、自然にファイナルになります。また、最終クラスのメソッドにファイナルを明示的に追加することもできますが、これは明らかに意味がありません。
ついに:
最後にキーワードは、Java例外処理モデルへの最適な追加です。最終的な構造により、例外が発生するかどうかに関係なく、コードは常に実行できます。最終的に使用して、オブジェクトの内部状態を維持し、非メモリリソースをクリーンアップします。最終的には、コードが混乱します。たとえば、次のコードは、最終的に使用せずに無料の非メモリリソースを無料で使用するためのコードを作成する方法を示しています。
public void writefile(string filepath、string filename、string args)slows ioexcepty {filepath + filename){fw.wrアイテム(args); ();
このコードは、FileWriterオブジェクトを作成し、書き込みメソッドを呼び出します。メソッドを終了する前に、リソースの脆弱性を回避するには、FileWriterオブジェクトを閉じる必要があります。このタスクを達成するために、メソッドの最後のステートメントである// 2に近いと呼びます。しかし、Tryブロックで例外が発生した場合はどうなりますか?この場合、// 2のクローズコールは起こりません。したがって、この例外を再発行する前に、この例外をキャッチし、// 1を閉じるために別の呼び出しを挿入する必要があります。これにより、メソッドを終了する前にFileWriterオブジェクトが閉じられます。このようなコードを書くことは面倒でエラーが発生しやすいですが、最終的には不可欠です。最後に、以前のコードを次の形式に書き換えることができます。
public void writefile(String filename、string args)は、filewriter fw = filepath + filename)をtry {fw.wrアイテム(args); fw .close();
最終的なブロックは、TRYブロック内で例外が発行されるかどうかに関係なく、緊密なメソッドが常に実行されることを保証します。したがって、メソッドを終了する前に、緊密な方法が常に呼び出されることが保証されます。このようにして、ファイルライターオブジェクトが閉じられており、リソースが漏れていないことを確認できます。
ファイナライズ:
Java言語仕様によれば、JVMは、このオブジェクトがファイナライズ関数を呼び出す前に到達不可能であることを保証しますが、JVMはこの関数が呼び出されることを保証しません。さらに、仕様により、ファイナライズ関数がせいぜい1回実行されることも保証されます。
一般に、ファイナライズは、一部のI/O操作やデータ接続など、制御が容易ではなく、非常に重要なリソースをリリースするために使用されます。これらのリソースのリリースは、アプリケーション全体にとって非常に重要です。この場合、プログラマーは主にプログラム自体(リリースを含む)を通じてこれらのリソースを管理し、リソースのリリースのみに依存するのではなく、デュアル保険管理メカニズムを形成するためのサプリメントとしてファイナライズ関数でリソースをリリースする方法を補完する必要があります。
要約します
Final Modifier(キーワード)クラスがファイナルと宣言されている場合、新しいサブクラスを導き出すことができず、親クラスとして継承することができないことを意味します。したがって、クラスを抽象的および最終の両方で宣言することはできません。変数またはメソッドを最終的に宣言することで、使用中に変更されないようにします。ファイナルとして宣言された変数は、宣言されたときに初期値を持たなければならず、将来の参照でのみ読み取ることができ、変更できません。ファイナルとして宣言された方法も使用することができ、過負荷にすることはできません。
最後に、例外が処理されたときに任意のクリアリング操作を実行するための最終ブロックが提供されます。例外がスローされた場合、マッチングキャッチ条項が実行され、コントロールが最終的なブロックに入ります(存在する場合)。
ファイナライズ - メソッド名。 Java Technologyを使用すると、Garbage Collectorがメモリからオブジェクトをクリアする前に、必要なクリーニング作業を行うためにfirenize()メソッドを使用できます。この方法は、オブジェクトが参照されていないと判断するときに、ガベージコレクターによって呼び出されます。オブジェクトクラスで定義されているため、すべてのクラスが継承されます。サブクラスは、システムリソースを整理したり、他のクリーニング作業を実行したりするためのfinalize()メソッドをオーバーライドします。 Garbage Collectorが削除する前に、Finalize()メソッドがオブジェクトで呼び出されます。