2012-01-03 100 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)
相關問題