[英]final and static in Java
我在一本書上看過這句話,但我不明白:
一個既是靜態又是最終的字段只有一塊不能改變的存儲。
誰能為我解釋一下?
您混淆的根源可能是英語中的“靜態”一詞和它在 Java 中的含義只是松散相關的。
以“正常”方式在類 Cat 中定義的變量可以稱為實例變量。
class Cat {
int weight;
}
每次創建 Cat 類型的新對象時,都會創建變量“weight”的新副本。 如果您創建 10 個 Cat 類型的對象,每個對象都有自己的權重變量副本。
一個“靜態”變量可以被認為是一個類級別的變量,而不是一個實例變量。 靜態變量只有一個副本並且屬於 Cat 類本身,而不是每個Cat 類型的對象都有一個副本。
class Cat {
static String speciesName;
int weight;
}
在這里,無論我們創建了多少個 Cat 類型的對象,物種名稱都只有一個副本。
如果靜態變量也是“最終的”,那么這個變量的副本是唯一無法更改的存儲。 如果上例中的變量“weight”是最終的,那么將有 10 個無法更改的存儲空間——一個用於我們創建的 Cat 類型的每個對象。
static
變量對於類的所有實例都是通用的。 final
變量在第一次設置后不能更改。
所以Java中的static final
變量對於類的所有實例都是通用的,並且在第一次設置后就無法更改。
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);
每輛車現在都有一個單獨的可變屬性color
,它們共享無法更改的屬性numberOfWheels
。
有關此頁面上的解釋,請參閱“常量”部分:
http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.