2012-01-03 87 views
0
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?为什么他们有相同的ID?

+1

静态变量是从类变量不同。从id中删除“static”。 – 2012-01-03 03:55:22

+2

@DarylTeo - 静态变量与* instance *变量不同。它们与* class *变量相同。见:http://en.wikipedia.org/wiki/Class_variable – 2012-01-03 04:02:41

+0

@lwburk有一个大脑屁=)。我的坏,谢谢。 – 2012-01-03 05:14:22

回答

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

你的id字段是静态的,所以所有的情况下,将具有相同的ID

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