2013-04-30 82 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.

相關問題