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类计数法后
答案 0 :(得分:2)
你只需要三次调用flag ++。所以最终的值是flag + 3(你必须初始化flag)。你必须要处理并发问题。
答案 1 :(得分:1)
它是静态的,所以无论你多少次调用它,如果你所做的每一次都在增加它,无论你从哪个类中调用它,那么它的价值就是。
不确定这是不是问题。
答案 2 :(得分:1)
假设您更正了声明:
private static int flag;
...直到/除非有人实际创建A
,B
,C
或D
的实例,flag
为{{1}因为这是它在初始化时获得的值。
如果你开始实例化事物并调用他们的0
函数(你必须实例化它们,因为count
不是count
),它的值会因代码而增加在static
。因为它是A#count
,所以跨实例共享相同的成员。因此:
static
等
答案 3 :(得分:1)
tldr; “静态字段”或“类变量”表示类的single variable shared among all instances(包括子类):
有时,您希望拥有所有对象共有的变量。这是通过静态修改器完成的。在声明中具有static修饰符的字段称为静态字段或类变量。 它们[静态字段]与类相关联,而不是与任何对象相关联。 该类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。 任何对象都可以更改类变量的值,但也可以在不创建的情况下操作类变量一个类的实例。
只有一个变量具有该特定名称。在这种情况下,类限定名称为A.flag
(在包之前使其完全合格)。 Java只允许以实例限定的方式访问静态字段,我认为这是一个历史错误......因为静态字段独立于任何实例而存在。