0

我有我的主课,我称之为我的子课。

我的子类包含一些公共静态变量,例如

    public class SubClass2 extends Main {


     public static  long a = 0;
     public static  long b = 0;
     public static  long c= 0;

    public void Analyze(int number)
    {
      b=2;

    //some code
     }
    }

在main中,我调用SubClass2的对象。每次我在main中创建subclass2的新对象时,它都会初始化所有变量= 0,但是当我使用变量b的打印语句时,它会打印出来4.它将以前的值与新值相加。

在此处输入图像描述

4

4 回答 4

6

在这种情况下,不应声明您的字段static。这就是为什么它们每次都没有被初始化的原因。一个static字段只初始化一次,然后由类的每个实例共享,并且取决于可访问性,也在类之外。

导致该值的逻辑4必须在您已替换为的代码中//some code,但这在这里并不真正相关。

如果出于某种原因这些确实应该是static每次实例化实例时都初始化的字段,那么您将不得不在类的构造函数中手动初始化它们。但我会认真质疑导致这种情况的设计......

于 2012-05-02T09:01:51.630 回答
4

您正在使用静态变量。这些与您创建的任何对象无关。它们只是全局的、唯一的变量。您必须擦除static. 顺便说一句,将一个字段初始化为 0 是多余的。它已经初始化为零。

于 2012-05-02T09:02:10.647 回答
1

你的问题体现了一个矛盾的术语。静态变量在加载类时初始化一次。如果要按实例初始化变量,请使用按实例(非静态)变量。

于 2012-05-02T09:50:38.040 回答
1

如果你使用静态这个词,那么只有一个变量实例在使用它的所有创建的东西之间共享。删除静态,每次在方法中初始化时都会有一个新的但更重要的是单独的变量。

也许更好的措辞是实例方法可以并且将访问共享/静态变量!

于 2012-05-02T09:04:13.947 回答