2016-05-07 120 views
2

我是Java新手,最近我研究了一些靜態變量。我知道,對於靜態變量內存只分配一次。這意味着它會節省大量的內存。我的問題是,如果靜態變量節省內存,爲什麼不把每個變量都聲明爲靜態。這將在創建應用程序時節省大量內存。如果這看起來是一個愚蠢的問題,請原諒我,但實際上我只是有點好奇。爲什麼不聲明每個變量都是靜態的

+1

編寫更多程序。您需要非靜態變量才能正確使用對象。 –

+1

你可以在這裏找到這個問題的答案http://stackoverflow.com/questions/7026507/why-are-static-variables-considered-evil – Mitiku

+2

如果你想有一個以上的對象類型例如兩個字符串,內容不同,不能使用靜態字段。 –

回答

0

創建屬性/變量的要點是您需要將它們作爲對象的「特徵」。例如,如果您有「汽車」類,也許您需要一個變量來引用汽車的顏色。

問題是,每個「汽車」(在現實世界中它將是每個不同的汽車)都有一個值,所以每個實例都必須是一個「獨立」變量。

您可以爲這些類的所有對象所共享的那些靜態變量使用靜態變量。例如,確定有多少輛汽車的櫃檯。該變量屬於名爲「Car」的類,但不屬於該類的任何特定實例。

1

這是OOP的基礎知識。再看一個例子:

class Person { 
    public String name = "Foo"; 
} 

name不是靜態的,這意味着Person類的對象不會分享它,每個人都會有它自己的。而當你改變一個人的名字時,其他人將不受影響。但是,如果你把它靜:

class Person { 
    public static String name = "Foo"; 
} 

這意味着,所有的人分享這是一種奇怪的名稱相同,你同意)

+0

謝謝你的回答。無論如何,我已經研究了java中的final關鍵字使變量的值變爲static。這就是說,我們不能在聲明變量後改變它的值,這與你的情況非常相似。但在static關鍵字的情況下,我們可以更改該變量的值。只有內存分配一次。這是讓我困惑的原因。 –

0

靜態變量的每類級別創建?創建類的對象時不會創建它。對於類的每個實例或對象,只有一個靜態成員變量的值。這打破了擁有對象和圍繞對象創建應用程序的目的。

0

是的,它將在生命週期中分配一次內存,並被稱爲類變量。類變量可以直接用類訪問,而不需要創建實例。這意味着它可以從任何地方和任何地方訪問。另外,內存分配意味着即使變量沒有在代碼中的許多地方使用,只要程序運行並且會佔用不必要的空間,它將永遠留在內存中。

+0

以這種方式進行的小規模(如果有的話)優化常常會破壞面向對象的規則,給軟件質量帶來不好的影響。正確的地方對於這樣的討論是一般的面向對象,而不是任何語言。 –

相關問題