静态变量标志的值是多少?

时间:2012-11-21 04:58:44

标签: java

public class A{
    private static flag;

    public void count(){
        flag++;
    }
}

public class B extends A{
    public void count(){
        super.count();
    }
}

public class C extends A{
    public void count(){
        super.count();
    }
}

}

public class D extends A{
    public void count(){
        super.count();
    }
}

让我们假设我的类以下列方式执行 B级 C级 D级

现在我想知道flag实例变量的值是多少 D类计数法后

4 个答案:

答案 0 :(得分:2)

你只需要三次调用flag ++。所以最终的值是flag + 3(你必须初始化flag)。你必须要处理并发问题。

答案 1 :(得分:1)

它是静态的,所以无论你多少次调用它,如果你所做的每一次都在增加它,无论你从哪个类中调用它,那么它的价值就是。

不确定这是不是问题。

答案 2 :(得分:1)

假设您更正了声明:

private static int flag;

...直到/除非有人实际创建ABCD的实例,flag为{{1}因为这是它在初始化时获得的值。

如果你开始实例化事物并调用他们的0函数(你必须实例化它们,因为count不是count),它的值会因代码而增加在static。因为它是A#count,所以跨实例共享相同的成员。因此:

static

答案 3 :(得分:1)

tldr; “静态字段”或“类变量”表示类的single variable shared among all instances(包括子类):

  

有时,您希望拥有所有对象共有的变量。这是通过静态修改器完成的。在声明中具有static修饰符的字段称为静态字段或类变量。 它们[静态字段]与类相关联,而不是与任何对象相关联。 该类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。 任何对象都可以更改类变量的值,但也可以在不创建的情况下操作类变量一个类的实例。

只有一个变量具有该特定名称。在这种情况下,类限定名称为A.flag(在包之前使其完全合格)。 Java只允许以实例限定的方式访问静态字段,我认为这是一个历史错误......因为静态字段独立于任何实例而存在。