8

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

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

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

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

我在正确的轨道上吗?

另外,“静态”到底是做什么的?如果类的实例位于类的主实例中,它是否只是静态的?

非常感谢。

4

3 回答 3

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。

于 2013-03-18T20:36:08.240 回答
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
于 2013-03-18T20:35:48.717 回答
1

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

于 2013-03-18T20:41:48.023 回答