Javaの静的と最終の違い

著者: Laura McKinney
作成日: 2 4月 2021
更新日: 3 J 2024
Anonim
【やさしくない!? Java】質問対応:staticの話
ビデオ: 【やさしくない!? Java】質問対応:staticの話

コンテンツ


静的と最終の両方は、Javaで使用されるキーワードです。クラスオブジェクトが作成される前に、静的メンバーにアクセスできます。 Finalは、クラス、メソッド、および変数に適用すると異なる効果があります。静的キーワードと最終キーワードの主な違いは、 静的 isキーワードは、そのクラスのオブジェクトとは無関係に使用できるクラスメンバーを定義するために使用されます。 最後の キーワードは、定数変数、オーバーライドできないメソッド、および継承できないクラスを宣言するために使用されます。

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

比較表

比較の根拠静的最後の
該当するStaticキーワードは、ネストされた静的クラス、変数、メソッド、およびブロックに適用できます。finalキーワードは、クラス、メソッド、および変数に適用できます。
初期化宣言時に静的変数を初期化することは必須ではありません。宣言時に最終変数を初期化することは必須です。
変形静的変数は再初期化できます。最終変数は再初期化できません。
方法静的メソッドは、クラスの静的メンバーにのみアクセスでき、他の静的メソッドによってのみ呼び出すことができます。最終メソッドは継承できません。
クラス静的クラスオブジェクトは作成できず、静的メンバーのみが含まれます。最終クラスはどのクラスにも継承できません。
ブロック静的ブロックは、静的変数を初期化するために使用されます。finalキーワードはそのようなブロックをサポートしていません。


静的の定義

静的は、クラス、変数、メソッド、およびブロックに適用可能なキーワードです。クラスメンバー、クラス、およびブロックは、それぞれクラスメンバー、クラス、およびブロックの名前の前に「static」キーワードを使用して静的にすることができます。クラスメンバが静的として宣言されると、クラスの他のすべてのメンバに対してグローバルになります。クラスの静的メンバーはインスタンスごとにメモリを占有しません。つまり、すべてのオブジェクトが静的メンバーの同じコピーを共有します。静的メンバーは、そのクラスのオブジェクトとは無関係に使用できます。オブジェクトが作成される前に、クラスの静的メンバーにアクセスできます。静的メンバーの最良の例はmain()メソッドです。これは静的と宣言されているため、オブジェクトが存在する前に呼び出すことができます。クラスの静的メンバーにアクセスする一般的な形式:

class_name.static_member //クラスの静的メンバーにアクセスします

上記のコードでは、class_nameはstatic_memberが定義されているクラスの名前です。静的メンバーは、静的変数または静的メソッドにすることができます

静的変数:

  • 静的変数は、クラスの他のすべてのデータメンバーのグローバル変数のように機能します。
  • クラスのオブジェクトが存在する前に、静的変数にアクセスできます。
  • 静的変数には、それが定義されているクラス名の後にドット(。)演算子を付けてアクセスできます。

静的メソッド:

  • 静的メソッドは、他の静的メソッドのみを呼び出すことができます。
  • 静的メソッドは、静的データにのみアクセスできます。
  • 静的メソッドは、どのような条件でも「this」または「super」と呼ぶことはできません。
  • 静的メソッドには、定義されているクラス名の後にドット(。)演算子を続けてアクセスできます。

静的クラス:


  • Javaには、ネストされた静的クラスの概念があります。最も外側のクラスを静的にすることはできませんが、最も内側のクラスを静的にすることはできます。
  • 静的にネストされたクラスは、外部クラスの非静的メンバーにアクセスできません。
  • 外部クラスの静的メンバーにのみアクセスできます。

静的ブロック:

静的ブロックは、クラスがロードされるときに一度だけ実行されます。クラスの静的変数を初期化するために使用されます。

C ++:

C ++には静的関数と静的変数の概念がありますが、C ++は静的クラスをサポートしていません。

C#:

C#は、静的クラス、静的変数、および静的クラスもサポートします。

Java:

Javaは、静的なネストされたクラス、静的変数、静的メソッドをサポートします。

最終の定義

Finalは、クラス、変数、およびメソッドに適用可能なキーワードです。クラス、変数、およびメソッドは、名前の後にキーワード「final」を使用してfinalとして宣言されます。変数がfinalとして宣言されると、プログラムでこれ以上変更することはできません。最終変数は、時刻の宣言時に初期化する必要があります。最終変数は、インスタンスごとにメモリを占有しません。クラスのすべてのオブジェクトは、最終変数の同じコピーを共有します。

finalとして宣言されたメソッドは、finalメソッドが宣言されているクラスのサブクラスによってオーバーライドできません。クラスがfinalとして宣言されている場合、他のクラスはそのfinalクラスを継承できません。 C ++、C#は、finalキーワードの概念をサポートしません。 Javaは、finalキーワードの概念とJavaをサポートしています。クラス、変数、およびメソッドはfinalとして宣言できます。

  1. staticキーワードは、ネストされた静的クラス、変数、メソッド、およびブロックに適用できます。一方、finalキーワードはクラスメソッドと変数に適用できます。
  2. 静的変数はいつでも初期化できますが、最終変数は宣言時に初期化する必要があります。
  3. 静的変数は再初期化できますが、初期化されると最終変数は再初期化できません。
  4. 静的メソッドは、クラスの静的メンバーにアクセスでき、他の静的メソッドによってのみ呼び出すことができます。一方、finalメソッドはどのクラスにも継承できません。
  5. 静的ブロックは静的変数の初期化に使用されますが、finalキーワードはブロックをサポートしません。

結論:

staticキーワードとfinalキーワードの両方は、クラス、変数、およびメソッドに適用されると、異なる目的を解決します。