public class Bird
{
private static int id = 0;
private String kind;
public Bird(String requiredKind)
{
id = id + 1;
kind = requiredKind;
}
public String toString()
{
return "Kind: " + kind + ", Id: " + id + "; ";
}
public static void main(String [] args)
{
Bird [] birds = new Bird[2];
birds[0] = new Bird("falcon");
birds[1] = new Bird("eagle");
for (int i = 0; i < 2; i++)
System.out.print(birds[i]);
System.out.println();
}
}
这是一个样本考试的问题,提出输出,答案是正确的 种类:猎鹰,Id:2;种类:鹰,Id:2;
我不明白为什么id为2,两个实例都相同。你能解释一下吗?
答案 0 :(得分:4)
由于id
字段是静态的,因此它在Bird
的所有实例的整个(及之外)都具有相同的值。
创建两个Bird
对象后,构造函数将被调用两次,因此id
将为2
。
答案 1 :(得分:0)
因为此处private static int id = 0;
id已声明为static or class variable。静态变量是类变量,每次创建对象时都不会初始化或创建它们。
因此,只存在一个静态变量副本。不,使用new
运算符创建对象时会创建新副本。
答案 2 :(得分:0)
因为id
是static
。这意味着它是一个“类变量/字段”,每个类只有一个。该类的所有实例共享它id
(确实称之为“id”感觉有点奇怪)。
请参阅here
答案 3 :(得分:0)
静态变量在对象之间共享。所以当执行时
birds[0] = new Bird("falcon");
id
增量为1.之后执行以下操作将其递增为2
birds[1] = new Bird("eagle");
答案 4 :(得分:0)
除了静态变量'for'love only put
System.out.print(birds[i]);
不是
System.out.println(birds[i]);
所以直到执行'for'循环结束它只打印一行,因为'for'循环没有{}括号它只循环一行
答案 5 :(得分:-1)
因为我们最后正在调用toString
。当toString
获取id
的值时,返回其始终为2。
最好逐个打印参考文献。