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();
}
}
为什么这会返回Kind: falcon, Id: 2; Kind: eagle, Id: 2
我真的无法弄明白?鸟类[0]和鸟类[1]有不同的实例,它们的ID是2吗?为什么它不是1和1?
答案 0 :(得分:5)
这是因为id
是静态的,因此在类的所有实例之间共享。
您可能想要的是这些内容:
public class Bird {
private static last_id = 0;
private int id ;
private String kind;
public Bird(String requiredKind) {
id = last_id++;
kind = requiredKind;
}
// ...
}
请注意,这可能过于简单,不适合多线程环境。
答案 1 :(得分:1)
您的ID字段是静态的,因此您的所有实例都具有相同的ID
答案 2 :(得分:0)