1. ホーム
  2. java

[解決済み] Staticとfinalの違い?

2022-02-08 02:33:54

質問

いつも迷うのは staticfinal のキーワードは ジャワ .

どのように違うのですか?

解決方法は?

static キーワードは、次の 4 つのシナリオで使用できます。

  • 静的変数
  • 静的メソッド
  • 静的コードブロック
  • 静的ネストされたクラス

まず、静的変数と静的メソッドについて見てみましょう。

静的変数

  • オブジェクト(インスタンス)ではなく、クラスに属する変数です。
  • 静的変数は、実行開始時に一度だけ初期化されます。これらの変数は、どのインスタンス変数の初期化よりも先に初期化されます。
  • クラスのすべてのインスタンスで共有される単一のコピーです。
  • 静的変数は、クラス名で直接アクセスでき、オブジェクトを必要としません。
  • シンタックス Class.variable

静電方式

  • オブジェクト(インスタンス)ではなく、クラスに属するメソッドです。
  • 静的メソッドは、静的データにのみアクセスすることができます。そのクラスのインスタンスを持つ/作成しない限り、非静的データ (インスタンス変数) にアクセスすることはできません。
  • 静的メソッドは、他の静的メソッドのみを呼び出すことができ、そのクラスのインスタンスを持っている/作成しない限り、そこから非静的メソッドを呼び出すことはできません。
  • 静的メソッドは、クラス名で直接アクセスでき、オブジェクトを必要としません。
  • シンタックス Class.methodName()
  • 静的メソッドは、以下のものを参照することはできません。 this または super というキーワードを使用します。

静的クラス

Javaには、quot;static nested classes"もあります。静的ネストクラスとは、外側のクラスのインスタンスへの参照を暗黙のうちに持たないクラスのことです。

静的ネストされたクラスは、インスタンスメソッドと静的メソッドを持つことができます。

Javaにはトップレベルの静的クラスというものは存在しません。

余談ですが

<ブロッククオート

メインメソッドは static インスタンス化が行われる前に、アプリケーションを実行するためにアクセス可能でなければならないからです。

final キーワードは、後で変更することができない実体を定義するために、いくつかの異なる文脈で使用されます。

  • A final クラスはサブクラス化できません。これは、セキュリティと効率性の理由からです。したがって、Java標準ライブラリクラスの多くは final は、例えば java.lang.Systemjava.lang.String . のすべてのメソッドは final クラスは暗黙のうちに final .

  • A final メソッドをサブクラスでオーバーライドすることはできません。これは、クラスの機能または一貫性にとって重要である可能性のあるメソッドをサブクラスが変更することによる予期せぬ動作を防ぐために使用されます。

  • A final 変数は、イニシャライザーか代入文のどちらかで一度だけ初期化することができます。宣言時に初期化する必要はありません。 blank final 変数があります。同様に、空白の最終インスタンス変数は、それが宣言されたクラスのすべてのコンストラクタの最後で確実に代入されなければなりません。空白の最終静的変数は、それが宣言されたクラスの静的イニシャライザで確実に代入されなければなりません。そうしないと、どちらの場合もコンパイル時エラーが発生します。

注:変数が参照である場合、これは、その変数が他のオブジェクトを参照するために再バインドされないことを意味します。しかし、その変数が参照しているオブジェクトは、元々ミュータブルであれば、まだミュータブルです。

メソッド本体で無名内部クラスが定義されている場合、その内部クラスで宣言されたすべての変数が、メソッド本体で定義されたすべての変数と同じになります。 final は、そのメソッドのスコープ内で内部クラスからアクセスできます。一度代入されたfinal変数の値は変更することができません。