SubClass变量不会再次初始化

时间:2012-05-02 09:00:49

标签: java

我有我的主要课程,我可以从中调用我的子课程。

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

    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中创建子类2的新对象时,它就会初始化 所有的变量= 0但是当我拿出变量b的print语句时,它打印出来就像4.它用新值加起来的前一个值。

enter image description here

4 个答案:

答案 0 :(得分:6)

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

导致价值4的逻辑必须位于您已用//some code替换的代码中,但这在此处并不重要。

如果无论出于何种原因这些实际上应该是static每次实例化实例时初始化的字段,那么你必须在类的构造函数中手动初始化它们。但我会严重质疑导致这种情况的设计......

答案 1 :(得分:4)

您正在使用静态变量。它们与您创建的任何对象都没有关联。它们只是全球性的,独特的变量。您必须删除static。顺便说一句,将字段初始化为0是多余的。它已经初始化为零。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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