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