私はこの文章を本で読みましたが、理解できませんでした:
Staticとfinalの両方のフィールドには、変更できないストレージが1つしかありません。
誰かが私にそれを説明できますか?
混乱の原因としては、英語の「静的」という単語と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つです。
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
を共有しています。
このページの説明については、「定数」セクションを参照してください。
http://download.Oracle.com/javase/tutorial/Java/javaOO/classvars.html