我是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
如果你想有一个以上的对象类型例如两个字符串,内容不同,不能使用静态字段。 –