2016-05-07 24 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

以这种方式进行的小规模(如果有的话)优化常常会破坏面向对象的规则,给软件质量带来不好的影响。正确的地方对于这样的讨论是一般的面向对象,而不是任何语言。 –

相关问题