2013-08-24 49 views
1

我是Java新手,想學習它。我寫了兩個類,如下所示,我期望打印爲1,2,3,但它打印的是3,3,3.我讀了一本關於我無法弄清楚上述行爲的java書,並打印了1,2,3。java程序的不尋常行爲

public class Student{ 
    private static int indexNumber = 0; 

    Student(){ 
     indexNumber=indexNumber+1; 
    } 
    public void test() { 
     System.out.println(this.getIndexNumber()); 
    } 
    public int getIndexNumber(){ 
     return indexNumber; 
    } 
} 

public class College { 
    public static void main(String args[]){ 
     Student student1 = new Student(); 
     Student student2 = new Student(); 
     Student student3 = new Student(); 

     student1.test(); 
     student2.test(); 
     student3.test(); 
    } 
} 

任何人都可以幫忙嗎?

+0

這將是非常有益的。 –

回答

2

您得到3,3,3,因爲您已將變量indexNumber定義爲靜態。因此,在實例化三個學生對象時,indexNumber的值爲3. 要將indexNumber定義爲實例變量並將其作爲參數傳遞給它。

6

indexNumber是靜態的,所以它在類的每個實例之間「共享」。

如果你想要一個獨特的,遞增的ID,請執行以下操作:

static int nextID = 1; 
int indexNumber; 

Student() { 
    indexNumber = (nextID++); 
} 

這使得indexNumber實例字段,讓每個Student獲得自己的副本。靜態變量用於跟蹤要分配的下一個ID。

2

您的字段是static.It將被所有對象共享。

private static int indexNumber = 0; 

s1-------->indexNumber<------s2 
      ^
       | 
       | 
       | 
       s3 

每次實例化,構造函數被調用,它遞增1

2

indexNumber的indexNumber被聲明爲static和通用於所有對象。因此你得到3,3,3

靜態成員與類關聯,而不是與任何對象關聯。

0

靜態成員與所有對象共享。你沒有編入索引,你計算了你的測試。

0

由於您已將INDEX NUMBER聲明爲靜態,因此它將由您爲該類創建的每個實例共享。您期望的答案將出現在您刪除static關鍵字的情況下。這就是爲什麼對於所有三個對象,索引號都會得到相同的值。我希望你現在明白。謝謝。