为什么他们有相同的身份证?

时间:2012-01-03 03:54:24

标签: java

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?

3 个答案:

答案 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)

  1. 静态字段是“每个类”而不是“每个实例”。
  2. 当您创建第一个对象时,将调用构造函数并且id变为1(0 + 1)。
  3. 当您创建第二个对象时,将调用构造函数并且id变为2(1 + 1)