web-dev-qa-db-ja.com

Java

私はこの文章を本で読みましたが、理解できませんでした:

Staticとfinalの両方のフィールドには、変更できないストレージが1つしかありません。

誰かが私にそれを説明できますか?

25
Ruba

混乱の原因としては、英語の「静的」という単語とJavaでの意味が大まかに関連しているだけであることが考えられます。

「通常の」方法でクラスCatで定義された変数は、インスタンス変数と呼ばれます。

class Cat {
   int weight;
}

Catタイプの新しいオブジェクトを作成するたびに、変数「weight」の新しいコピーを作成します。 Catタイプのオブジェクトを10個作成すると、それぞれにウェイト変数の独自のコピーがあります。

「静的」変数は、インスタンス変数ではなく、クラスレベルの変数と考えることができます。静的変数は1つのコピーのみを持ち、Catタイプのeachオブジェクトの1つのコピーではなく、Catクラス自体に属します。

class Cat {
   static String speciesName;

   int weight;
}

ここでは、Catタイプのオブジェクトをいくつ作成しても、speciesNameのコピーは1つしかありません。

静的変数も「最終」である場合、変数のこの1つのコピーが、変更できない唯一のストレージです。上記の例で変数 'weight'がfinalの場合、変更できないストレージが10個あります。作成したCatタイプのオブジェクトごとに1つです。

52
Mike Edwards

static変数は、クラスのすべてのインスタンスに共通です。 final変数は、最初に設定された後は変更できません。

したがって、static final Javaの変数はクラスのすべてのインスタンスに共通であり、最初に設定された後は変更できません。

class Car {

    static final int numberOfWheels = 4;
    Color color;

    public Car(Color color) {
        this.color = color;
    }
}

Car redCar = new Car(Red);
Car blueCar = new Car(Blue);

各車には、1つの個別の可変プロパティcolorがあり、変更できないプロパティnumberOfWheelsを共有しています。

26
Jonas
  • Finalは、どの変数にも値を再割り当てできないことを意味します
  • 静的は、すべてのメソッドのクラスで全体として参照のコピーが1つだけ存在できることを意味します。
1
Vishwa

このページの説明については、「定数」セクションを参照してください。

http://download.Oracle.com/javase/tutorial/Java/javaOO/classvars.html

1
rmk