我是Java新手,最近我研究了一些靜態變量。我知道,對於靜態變量內存只分配一次。這意味着它會節省大量的內存。我的問題是,如果靜態變量節省內存,爲什麼不把每個變量都聲明爲靜態。這將在創建應用程序時節省大量內存。如果這看起來是一個愚蠢的問題,請原諒我,但實際上我只是有點好奇。爲什麼不聲明每個變量都是靜態的
回答
創建屬性/變量的要點是您需要將它們作爲對象的「特徵」。例如,如果您有「汽車」類,也許您需要一個變量來引用汽車的顏色。
問題是,每個「汽車」(在現實世界中它將是每個不同的汽車)都有一個值,所以每個實例都必須是一個「獨立」變量。
您可以爲這些類的所有對象所共享的那些靜態變量使用靜態變量。例如,確定有多少輛汽車的櫃檯。該變量屬於名爲「Car」的類,但不屬於該類的任何特定實例。
這是OOP的基礎知識。再看一個例子:
class Person {
public String name = "Foo";
}
場name
不是靜態的,這意味着Person
類的對象不會分享它,每個人都會有它自己的名。而當你改變一個人的名字時,其他人將不受影響。但是,如果你把它靜:
class Person {
public static String name = "Foo";
}
這意味着,所有的人分享這是一種奇怪的名稱相同,你同意)
謝謝你的回答。無論如何,我已經研究了java中的final關鍵字使變量的值變爲static。這就是說,我們不能在聲明變量後改變它的值,這與你的情況非常相似。但在static關鍵字的情況下,我們可以更改該變量的值。只有內存分配一次。這是讓我困惑的原因。 –
靜態變量的每類級別創建?創建類的對象時不會創建它。對於類的每個實例或對象,只有一個靜態成員變量的值。這打破了擁有對象和圍繞對象創建應用程序的目的。
是的,它將在生命週期中分配一次內存,並被稱爲類變量。類變量可以直接用類訪問,而不需要創建實例。這意味着它可以從任何地方和任何地方訪問。另外,內存分配意味着即使變量沒有在代碼中的許多地方使用,只要程序運行並且會佔用不必要的空間,它將永遠留在內存中。
以這種方式進行的小規模(如果有的話)優化常常會破壞面向對象的規則,給軟件質量帶來不好的影響。正確的地方對於這樣的討論是一般的面向對象,而不是任何語言。 –
- 1. 聲明靜態變量時的輸出是什麼?爲什麼?
- 2. PHP - 爲什麼我無法聲明靜態常量變量?
- 3. 爲什麼不能在非靜態塊中聲明靜態最終變量?
- 4. 函數內部聲明的靜態變量的值是什麼?
- 5. 爲什麼變量應聲明爲靜態和最終
- 6. 變量聲明後的靜態塊是什麼?
- 7. Django - 爲什麼模型類中聲明的變量靜態
- 8. 爲什麼我不能聲明一個參數化的靜態類變量?
- 9. 爲什麼靜態變量需要在C++中聲明兩次
- 10. 爲什麼WebMethod聲明爲靜態?
- 11. 爲什麼不是每種方法都是靜態方法?
- 12. 爲什麼C#不允許變量在方法中聲明爲靜態?
- 13. 即使函數是靜態的,爲什麼我們不能在函數體內聲明靜態變量?
- 14. 爲什麼不是這個靜態c#變量改變?
- 15. 靜態變量和靜態變量的區別是什麼?
- 16. 什麼是C++聲明一個變量不變的點
- 17. 爲什麼靜態變量不好?
- 18. 爲什麼java常量聲明爲靜態?
- 19. 什麼是聲明靜態可變值的正確方法
- 20. 爲什麼不能所有的方法和類變量都是靜態的?
- 21. 靜態變量聲明的時間
- 22. 爲什麼這個對象聲明在node.js中工作以及如何聲明一個靜態變量?
- 23. 在java中的靜態塊中聲明變量的範圍是什麼?
- 24. 共享/靜態變量應該什麼都不是 - 給出了什麼?
- 25. C#中靜態變量的用法是什麼?何時使用它?爲什麼我不能在方法中聲明靜態變量?
- 26. 爲什麼聲明Mapper和Reducer類是靜態的?
- 27. 爲什麼Xcode告訴我這個變量是未聲明的?
- 28. 聲明全局靜態變量
- 29. 聲明靜態變量在單
- 30. 聲明和放置靜態變量
編寫更多程序。您需要非靜態變量才能正確使用對象。 –
你可以在這裏找到這個問題的答案http://stackoverflow.com/questions/7026507/why-are-static-variables-considered-evil – Mitiku
如果你想有一個以上的對象類型例如兩個字符串,內容不同,不能使用靜態字段。 –