簡體   English   中英

Java中靜態變量的問題

[英]questions on static variables in java

我試圖在程序中使用靜態變量,並且了解到靜態變量意味着每次都使用相同的變量實例。

但是,我一直在使用靜態變量,因為我認為它允許我在不“實例化”(新)類的情況下獲取所需的變量。 或者特別是因為我需要另一個類中的變量,並且我不應該創建該類的新實例。

這是正確的方法嗎?

我應該創建靜態GET方法來獲取在類中聲明的靜態變量嗎?

...,我一直在使用靜態變量,因為我認為它可以讓我獲取所需的變量,而無需“實例化”(新)課堂

聲明一個靜態變量, 並不意味着你繞過 它僅表示變量引用一個類,並且僅引用其類的一個實例。

例:

class Universe { 

   //there is only one Earth, but it needs to be constructed.  In this example, when
   //the Universe class is loaded, the initialization below happens.
   static World EARTH = new World(...);

   public static Planet getTheEarth() { 
       return EARTH;
   }

}

或者特別是因為我需要另一個類中的變量,並且我不應該創建該類的新實例。

好的,因此將對變量的引用傳遞給另一個類。

例:

class Earth {    

    Moon moon;

    public Earth(Moon moon) {    
        this.moon = moon;
    }
}

如果要在一個類的所有實例之間共享1個值,則使用靜態變量。 例如,如果您有類似的東西

public class Person {

public static int instancesCount = 0;

public Person() { 

Person.instancesCount++;
}
}

這意味着對於Person的每個實例,“全局” instanceCount變量將增加一個。 所以如果你這樣做

Person p1 = new Person();
Person p2 = new Person();

那么這兩個實例s(p1和p2)都可以訪問Person.instanceCount變量,並且它們都將顯示數字2。此外,如果您在兩個實例中都修改了變量,則它們都將具有相同的可見性。

基本上,除非您知道自己在做什么,否則不要使用靜態變量。

首先,您不應該使用GET方法來獲取在類中聲明的靜態變量。 例如,如果要打印靜態變量,請執行以下操作:

static int staticVariable = 0;    
ClassObject c;
System.out.println(c.staticVariable);

基本上,該類的任何對象都可以訪問靜態變量,而您所要做的就是使用該類的實例來訪問它。 我建議您遠離靜態變量,直到您對它們有了更好的了解。

“需要另一個類中的變量”是什么意思? 為什么“您不應該創建一個新實例”? 為什么變量首先放在另一個類中?

類不是代碼和/或數據的存儲容器。 它們是新數據類型的定義 因此,整個“實例”都是如此。

如果您只是在使用您的告訴其他類可以訪問的保留數據類,則您可能不想使用靜態字段。 如果要確保只有一個此類的實例,則使用單例模式可能會更好,更靈活。 僅當您希望類的所有實例共享該字段時,才應使用靜態字段。

您確實需要獲得一些基本的面向對象編程概念。 從《 Thinking in Java》或《 Effective Java》一書開始。

暫無
暫無

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

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