English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Javaのfinalキーワードの深い理解

 java finalキーワードの詳細:

前書き:

Javaのfinalキーワードは非常に重要で、クラス、メソッド、変数に適用できます。この記事では、finalキーワードとは何か、変数、メソッド、クラスをfinalとして宣言することの意味、finalを使用する利点について説明します。最後に、finalキーワードの使用例もあります。finalはよくstaticと一緒に使用され、定数を宣言するために使用されます。また、finalがアプリケーションのパフォーマンスをどのように改善するかも見てみましょう。

finalキーワードの意味63;

finalはJavaで保留されたキーワードであり、メンバー変数、メソッド、クラス、ローカル変数を宣言できます。参照をfinalとして宣言すると、その参照を変更することができなくなります。コンパイラはコードをチェックし、変数を再初期化しようとするとコンパイルエラーが報告されます。

final変数とは何ですか?

メンバー変数またはローカル変数(メソッド内またはコードブロック内の変数をローカル変数と呼びます)がfinalとして宣言された場合、final変数と呼ばれます。final変数はよくstaticキーワードと一緒に使用され、定数として使用されます。以下はfinal変数の例です:

public static final String LOAN = "loan";
LOAN = new String("loan") //無効なコンパイルエラー

final変数は読み取り専用です。

finalメソッドとは何ですか?63;

finalキーワードで宣言することで、メソッドを宣言できます。finalキーワードがついたメソッドは、子クラスのメソッドでオーバーライドできません。もしあのメソッドの機能が十分に完全で、子クラスで変更する必要がないと考えた場合、そのメソッドをfinalとして宣言できます。finalメソッドは非finalメソッドよりも速く動作します。なぜなら、コンパイル時に既に静的にバインドされているため、実行時の動的バインドは必要ありません。以下はfinalメソッドの例です:

class PersonalLoan{
  public final String getName(){
    return "personal loan";
  }
}
class CheapPersonalLoan extends PersonalLoan{
  @Override
  public final String getName(){
    return "cheap personal loan"; //コンパイルエラー:オーバーライドされたメソッドがfinalです
  }
}

finalクラスとは何ですか?

finalキーワードで修飾されたクラスはfinalクラスと呼ばれます。finalクラスは通常完全な機能を持っており、継承することはできません。JavaにはString、Interger、その他の包装クラスなど、多くのfinalクラスがあります。以下はfinalクラスの例です:

 final class PersonalLoan{
  }
  class CheapPersonalLoan extends PersonalLoan{ //コンパイルエラー:finalクラスからの継承ができません
}

  finalキーワードの利点

以下にfinalキーワードの使用による利点をまとめました

  1. finalキーワードはパフォーマンスを向上させます。JVMとJavaアプリケーションはfinal変数をキャッシュします。
  2. final変数はマルチスレッド環境で安全に共有できますが、追加のシンクロナイズのコストは必要ありません。
  3. finalキーワードを使用すると、JVMはメソッド、変数、クラスを最適化します。

不可変クラス

不可変クラスを作成するにはfinalキーワードを使用します。不可変クラスとは、一旦作成されると変更できないクラスです。Stringは不可変クラスの代表です。不可変クラスには多くの利点があります。例えば、そのオブジェクトは読み取り専用であり、マルチスレッド環境で安全に共有できます。また、追加のシンクロナイズのコストは必要ありません。

finalに関する重要なポイント

  1. finalキーワードはメンバ変数、ローカル変数、メソッド、クラスに使用できます。
  2. finalメンバ変数は宣言時に初期化するか、コンストラクタ内で初期化する必要があります。それをしないとコンパイルエラーが発生します。
  3. final変数には再び割り当てることはできません。
  4. ローカル変数は宣言時に値を割り当てなければなりません。
  5. 匿名クラス内のすべての変数はfinal変数でなければなりません。
  6. finalメソッドはオーバーライドできません。
  7. finalクラスは継承できません。
  8. finalキーワードはfinallyキーワードとは異なり、後者は例外処理に使用されます。
  9. finalキーワードはfinalize()メソッドと混同しやすいが、后者はObjectクラスで定義されたメソッドであり、JVMがゴミ収集を行う前に呼び出されるメソッドです。
  10. インターフェースで宣言されたすべての変数はfinalです。
  11. finalとabstractというキーワードは反対関係にあります。finalクラスはabstractではありません。
  12. finalメソッドはコンパイル段階でバインドされ、静的バインドと呼ばれます。
  13. 宣言時に初期化されていないfinal変数は空白final変数と呼ばれます。これらはコンストラクタ内で初期化する必要があります。またはthis()を呼び出して初期化する必要があります。これをしないと、コンパイラは「final変数(変数名)は初期化が必要です」とエラーを報告します。
  14. クラス、メソッド、変数をfinalとして宣言することで、パフォーマンスを向上させることができます。これにより、JVMは予測を行い、最適化を行う機会があります。
  15. Javaのコードの慣習に従って、final変数は定数であり、通常定数名は大文字で書かれます:
private final int COUNT = 10;

集合オブジェクトがfinalと宣言されている場合、参照は変更できませんが、追加、削除、または内容を変更することができます。例えば:

private final List Loans = new ArrayList();
list.add(“home loan”); //valid
list.add("personal loan"); //valid
loans = new Vector(); //not valid

final変数、finalメソッド、finalクラスが何かを知っています。必要なときにfinalを使用すると、より速くて良いコードを書くことができます。

 読んでいただきありがとうございます。皆様のサポートに感謝します!

おすすめ