簡體   English   中英

Java中的最終和靜態

[英]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

  • final意味着不能為任何變量重新賦值
  • 靜態意味着在所有方法的類中只能有一個完整的引用副本。

有關此頁面上的解釋,請參閱“常量”部分:

http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM