推奨されます, 2024

エディターズチョイス

JavaでのFinal、finally、およびFinalizeの違い

「final、finally、finalize」という言葉は、Javaのコンテキスト内にあります。 それらのそれぞれは異なる機能を提供されます。 final、finally、およびfinalizeの基本的な違いは、 finalがアクセス修飾子であり、 finallyがブロックであり、 finalizeがオブジェクトクラスのメソッドであることです。 比較チャートで説明しているように、final、finally、finalizeの間には他にもいくつかの違いがあります。

比較表

比較基準最後の最後に確定する
基本Finalは、Javaの「キーワード」と「アクセス修飾子」です。最後に、Javaの "ブロック"です。ファイナライズはJavaの「メソッド」です。
該当するFinalはクラス、変数、メソッドに適用可能なキーワードです。最後は常にtry and catchブロックに関連付けられているブロックです。finalize()はオブジェクトに適用可能なメソッドです。
ワーキング(1)最後の変数は定数になり、再割り当てできません。
(2)最後のメソッドは、子クラスによってオーバーライドできません。
(3)ファイナルクラスは延長できません。
「finally」ブロック。「try」ブロックで使用されているリソースをクリーンアップします。finalizeメソッドは、オブジェクトが破棄される前にそのオブジェクトに関連するアクティビティをクリーンアップします。
実行最後のメソッドはその呼び出しで実行されます。「finally」ブロックは「try-catch」ブロックの実行直後に実行されます。finalize()メソッドは、オブジェクトが破棄される直前に実行されます。

ファイナルの定義

“ Final”はJavaのキーワードです。 これはアクセス修飾子です。 “ final”キーワードはクラス、メソッド、変数に適用できます。 それが各自とどのように機能するか見てみましょう。

最終変数

  • 最後のキーワードが変数に適用されると、それ以上修正することはできません。
  • 最終変数は、宣言時に初期化する必要があります。
  • 一般的なコーディング規約では、最終変数は大文字で宣言されます。
  • 最後の変数は、インスタンスごとにメモリを占有しません。
 final int FILE_OPEN = 2。 

最終的な方法

  • クラスのメソッドがfinalとして宣言されている場合、そのサブクラスでオーバーライドすることはできません。
  • finalと宣言された小さなメソッドはコンパイラによって「インライン」にすることができ、それによって関数呼び出しのオーバーヘッドが削減され、パフォーマンスが向上します。
  • オーバーライドされたメソッド呼び出しは動的に解決されますが、メソッドがfinalとして宣言されている場合はオーバーライドできません。 したがって、関数呼び出しはコンパイル時に解決できます。
 クラスA {final void meth(){System.out.println( "これは最後のメソッドです。"); クラスBはAを拡張します。{void meth(){//クラスBはクラスAのメソッドを継承できません。System.out.println( "上書きしない"); }} 

ファイナルクラス

  • クラスがfinalとして宣言されていると、どのサブクラスにも継承できません。
  • クラスをfinalとして宣言すると、そのすべてのメソッドが自動的にfinalとして宣言されます。
  • クラスを“ abstract”と“ final”の両方として宣言することはできません。
 最終クラスA {// ...}クラスBはAを拡張する{//クラスBはクラスAを継承できない// ...} 

最後の定義

  • Javaでは、「finally」は常にtry / catchブロックに関連付けられているブロックです。
  • 「finally」ブロックは、try / catchブロックの後で、try / catchブロックの後のコードの前に実行されます。
  • 「finally」ブロックは、例外がスローされたかどうかにかかわらず実行されます。
  • 例外がスローされ、それでもキャッチブロックがその例外に一致しない場合、「finally」ブロックが実行されます。
  • メソッドがtry / catchブロック内からキャッチされていない例外または明示的なreturn文を介して呼び出し元に戻ると、「finally」ブロックはメソッドが呼び出し元に戻る直前に実行されます。
  • 「finally」ブロックは、リソースをクリーンアップするため、または「try」ブロックで使用されていたメモリを解放するために使用されます。
  • 「finally」ブロックはオプションですが、try / catchブロックの後にfinallyブロックを書くことをお勧めします。
 class finallyExample {//このメソッドはメソッドから例外を投げます。 static void procA(){System.out.println( "inside procA");を試してください。 新しいRuntimeException( "demo")をスローします。 } {System.out.println( "procA's finally"); // tryブロック内から戻ります。 static void procB(){System.out.println( "inside procB");を試してください。 戻る System.out.println( "procB's finally"); //通常どおりtryブロックを実行します。 static void procC(){System.out.println( "inside procC")を試してください。 {System.out.println( "procC's finally"); public static void main(String args []){try {procA();}} catch(例外e){System.out.println( "Exception catch");} procB(); procC(); procA procA's finally内に出力された例外procB procB内最終的にprocC procC内最終的に捕捉された例外 

ファイナライズの定義

  • Finalizeはオブジェクトクラスの中のメソッドです。
  • オブジェクトがファイルハンドルなどの非Javaリソースを保持している可能性があります。 それはそれが破壊される前に解放されなければなりません。
  • このメソッドは、オブジェクトを完全に破棄する前にガベージコレクタによって呼び出されます。
  • このメソッドは、オブジェクトが破棄される前にそのオブジェクトのクリーンアップアクティビティを実行します。

メソッドfinalize()の一般的な形式は以下の通りです。

 protected void finalize(){//ファイナライズコードはこちら} 

finalizeメソッドはprotectedとして宣言されているので、クラスの外部からアクセスすることはできません。

このメソッドは常にガベージコレクションの前に呼び出されます。

ファイナル、ファイナル、ファイナライズの主な違い

  1. キーワードfinalはアクセス修飾子、最後はブロック、そしてfinalizeはメソッドです。
  2. キーワードfinalは、クラス、クラスの変数およびメソッドに適用できます。最後に、例外を処理するために使用されるtry catchブロックに関連付けられたブロックです。finalizeは、オブジェクトに対してのみ機能するメソッドです。
  3. finalとして宣言された変数は定数になり、再度割り当てることはできません。finalとして宣言されたメソッドはオーバーライドできません。また、finalとして宣言されたクラスは継承できません。 finallyブロックは、try and catchブロックによって使用されているリソースをクリーンアップするために使用されます。 finalizeメソッドは、オブジェクトが破棄される前に、オブジェクトによって使用されているリソースをクリーンアップするために使用されます。

結論:

メソッドに適用すると、Final、finally、およびfinalizeは異なる効果があります。

Top