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

著者: Laura McKinney
作成日: 2 4月 2021
更新日: 14 5月 2024
Anonim
最終的にファイナルとJavaでファイナライズの違い(ヒンディー語)
ビデオ: 最終的にファイナルとJavaでファイナライズの違い(ヒンディー語)

コンテンツ


「final、finally、and finalize」という言葉はJavaの短所にあります。それらのそれぞれに異なる機能が提供されます。 final、finally、finalizeの基本的な違いは、 最後の アクセス修飾子です。 最後に ブロックであり、 ファイナライズ オブジェクトクラスのメソッドです。 final、finally、およびfinalizeには、比較チャートで説明されている他のいくつかの違いがあります。

  1. 比較表
  2. 定義
  3. 主な違い
  4. 結論

比較表

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


最終の定義

「最終」はJavaのキーワードです。これはアクセス修飾子です。 「final」キーワードは、クラス、メソッド、および変数に適用されます。それらがそれぞれどのように機能するかを見てみましょう。

最終変数

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

final int FILE_OPEN = 2;

最終的な方法

  • クラス内のメソッドがfinalとして宣言されている場合、そのサブクラスによってオーバーライドすることはできません。
  • finalとして宣言されている小さなメソッドは、コンパイラーによって「インライン」にすることができます。これにより、関数呼び出しのオーバーヘッドが削減され、パフォーマンスが向上します。
  • オーバーライドされたメソッド呼び出しは動的に解決されますが、メソッドがfinalとして宣言されている場合、オーバーライドすることはできません。したがって、関数呼び出しはコンパイル時に解決できます。

クラスA {final void meth(){System.out.ln( "これはfinalメソッドです。"); }}クラスBはAを拡張します{void meth(){//クラスBはクラスAのメソッドを継承できません。System.out.ln( "Does not override"); }}

最終クラス

  • クラスがfinalとして宣言されると、どのサブクラスからも継承できません。
  • クラスをfinalとして宣言すると、そのすべてのメソッドが自動的にfinalとして宣言されます。
  • クラスを「抽象」と「最終」の両方として宣言することはできません。

final class A {// ...} class B extends A {// Class Bは継承できませんclass A // ...}

  • Javaでは、「最終的に」ブロックは常にtry / catchブロックに関連付けられます。
  • 「最終」ブロックは、try / catchブロックの後、try / catchブロックに続くコードの前に実行されます。
  • 「最終」ブロックは、例外がスローされたかどうかに関係なく実行されます。
  • 例外がスローされ、そのキャッチに一致するcatchブロックがない場合、「最終」ブロックが実行されます。
  • メソッドがキャッチされない例外または明示的なreturnステートメントを介してtry / catchブロック内から呼び出し元に戻ると、メソッドが呼び出し元に戻る直前に「最終」ブロックが実行されます。
  • 「finally」ブロックは、「try」ブロックで使用されたリソースをクリーンアップするか、メモリを解放するために使用されます。
  • 「finally」ブロックはオプションですが、try / catchブロックの後にfinallyブロックを記述することをお勧めします。

class finallyExample {//このメソッドは、メソッドから例外をスローします。 static void procA(){try {System.out.ln( "inside procA");新しいRuntimeException( "demo")をスローします。 } finally {System.out.ln( "procAs finally"); }} // tryブロック内から戻ります。 static void procB(){try {System.out.ln( "inside procB");戻り; } finally {System.out.ln( "procBs finally"); }} // tryブロックを通常どおり実行します。 static void procC(){try {System.out.ln( "inside procC"); } finally {System.out.ln( "procCs finally"); }} public static void main(String args){try {procA(); } catch(例外e){System.out.ln( "Exception caught"); } procB(); procC(); }} // procA内の出力procAのfinally procB内でキャッチされた例外procBがついにprocC内にprocCがついに

ファイナライズの定義

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

メソッドfinalize()の一般的な形式は次のとおりです。


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

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

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

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

結論:

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