我有我的主要课程,我可以从中调用我的子课程。
我的子类包含一些公共静态变量,如
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.它用新值加起来的前一个值。
答案 0 :(得分:6)
在这种情况下,您的字段不应声明为static
。这就是他们每次都没有被初始化的原因。 static
字段仅初始化一次,然后由类的每个实例共享,并且取决于可访问性,也在类之外。
导致价值4
的逻辑必须位于您已用//some code
替换的代码中,但这在此处并不重要。
如果无论出于何种原因这些实际上应该是static
每次实例化实例时初始化的字段,那么你必须在类的构造函数中手动初始化它们。但我会严重质疑导致这种情况的设计......
答案 1 :(得分:4)
您正在使用静态变量。它们与您创建的任何对象都没有关联。它们只是全球性的,独特的变量。您必须删除static
。顺便说一句,将字段初始化为0是多余的。它已经初始化为零。
答案 2 :(得分:1)
如果使用单词static,则只会有一个变量实例在创建的使用它的所有内容之间共享。删除静态,每次在方法中初始化时,都会有一个新的,但更重要的是单个变量。
也许更好的措辞是实例方法可以并且将访问共享/静态变量!
答案 3 :(得分:1)
你的问题体现了矛盾。加载类时,静态变量初始化一次。如果希望每个实例初始化变量,请使用每个实例(非静态)变量。