【问题标题】:What is the difference between an instance and a class (static) variable in Java [closed]Java中的实例和类(静态)变量有什么区别[关闭]
【发布时间】:2013-03-07 08:30:07
【问题描述】:

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

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

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

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

我在正确的轨道上吗?

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

非常感谢。

【问题讨论】:

  • 你几乎是对的。不过,类变量可以发生变异。
  • 你说的基本正确。 (静态变量可以改变,如果不是最终的。)特定术语“静态”在某种程度上是一种传统,在这种情况下会被滥用。
  • (没有一个类的“主实例”——所有实例都是平等的(即使有些实例偶尔比其他实例更平等)。)
  • 这是很好的反馈和答案。我开始了,虽然慢慢地了解它!谢谢大家。

标签: java static instance-variables class-variables


【解决方案1】:

您可以创建类的多个实例。当您声明一个实例变量时,每个实例都会获得该变量的唯一副本。当你声明一个静态变量时,它是所有实例的相同变量和值。

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

【讨论】:

  • 太好了。感谢您的澄清。
  • 我现在明白了。这很棒。谢谢你,非常有帮助。
  • 这个答案比第一个更好:)
  • 很好的解释,你解决了我长达 1 个月的困惑。神奇的 2.25 行解释。
【解决方案2】:

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

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

这是一个有用的例子:

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

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。

【讨论】:

  • 感谢您的反馈。这有助于我理解,因为它可能会很混乱!!谢谢!!
  • 这是一个很好的例子。帮助我理解答案。非常感谢。
  • 在这里感谢大家的帮助。真的很感激。
  • 静态变量不会“在编译时加载”。它们在加载时加载并在类初始化时初始化。
【解决方案3】:

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

【讨论】:

  • 非常感谢您的反馈。现在开始获得它。
猜你喜欢
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
相关资源
最近更新 更多