2013-04-30 84 views
-3
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(); 
} 
} 

我明白,因为int是静态的,两个id将是相同的,但不知道为什么输出是2而不是1?运行时为什么输出到这个代码都是2?

输出:

Kind: falcon, Id: 2; Kind: eagle, Id: 2; 

回答

5

这是一个静态的所有对象实例variable..shared。你创建了两个对象,因此通过构造函数递增了两次..老实说,我看不到还有什么我可以添加到答案。

//where [x] denotes id: 
    First instance: id = [0] + 1; //id is 1 
    Second instance id = [1] + 1 // id is 2 

嗯..如果你想拥有一个唯一的ID,你可以有一个额外的域,是唯一的一个对象,我想这应该解决您的问题:

private int Id; 
private static int tracker; 
public Bird() 
{ 
    //keep track of object instances, yet each increment is unique to a particular 
    //object 
    Id = ++tracker; 
} 
+2

哦,我明白了,谢谢你所有的答案 – user2121536 2013-04-30 09:49:16

1

由于idstatic,它由Bird的所有实例共享。您创建了2个对象,并且id增加了两次,因此,当您试图为每个Bird实例打印id时,打印了2

0

static变量由所有创建的对象共享,它被初始化一次,所以每次创建一个新对象时都不会初始化。

由于id的初始值为0,所以您创建了两个新对象。所以这个值会增加两次,新的值将会是2.

相关问题