Java中的实例和类(静态)变量之间有什么区别

时间:2013-03-18 20:34:03

标签: java static instance-variables class-variables

这个问题的标题实际上是以前的考试问题,我正在寻找澄清/答案。

请注意我正在学习Java并且熟悉它的语法。

我知道以前可能会问过这个问题,如果有的话,有人可以告诉我在哪里可以访问这个问题吗?如果是这种情况,也请接受我的道歉。 为了表明我一直在研究这个领域,我自己的理解是实例变量属于某个类(模板)的对象/实例,并且可以在需要时在该实例/对象中进行更改(变异)。

一个类变量是一个只有一个副本且可以被访问但不被修改(变异?)的变量,但是所有类都可以根据需要使用它?

我在这里走在正确的轨道上吗?

此外,'静态'到底是什么?做?如果一个类的实例位于类的主实例中,那么它是静态的吗?

非常感谢。

3 个答案:

答案 0 :(得分:20)

静态变量由类的所有实例共享,而实例变量对于类的每个实例都是唯一的。

静态变量的内存在编译时分配,它们在加载时加载并在类初始化时初始化。在实例变量的情况下,以上所有操作都是在运行时完成的。

这是一个有用的例子:

实例变量是每个对象一个:每个对象都有自己的实例变量副本。

public class Test{

   int x = 5;

 }

Test t1 = new Test();   
Test t2 = new Test();

t1和t2都有自己的x副本。

静态变量是每个类一个:该类的每个对象共享相同的静态变量。

public class Test{

   public static int x = 5;

 }

Test t1 = new Test();   
Test t2 = new Test();

t1和t2都将共享相同的x。

答案 1 :(得分:5)

您可以制作班级的多个实例。声明实例变量时,每个实例都会获得该变量的唯一副本。声明静态变量时,它对于所有实例都是相同的变量和值。

public class Foo
{
    public int instanceVariable;
    public static int staticVariable;
}

Foo instance1 = new Foo();
Foo instance2 = new Foo();
instance1.staticVariable = 1;
instance1.instanceVariable = 2;
instance2.instanceVariable = 3;

instance1.staticVariable == 1 // true
instance2.staticVariable == 1 // true

instance1.instanceVariable == 2 //true
instance2.instanceVariable == 3 //true

答案 2 :(得分:1)

静态变量存储在其定义的类的所有实例(或非实例)之间共享的值。 其中,按名称实例变量每次都创建一个新副本。当创建新对象时。