2016-03-10 17 views
0

我工作的程序中需要計算某個類(及其所有子類)創建了多少個對象。我做了我的複製問題進行快速測試程序:不是每次初始化我創建一個新的對象時當創建新對象時,我的計數器保持相同的編號

public class Test { 

    private int number = 0; 

    public Test(){ 
     number++; 
    } 

    public int returnNumber(){ 
     return number; 
    } 
} 

如何讓我變「數」保存其價值,?

+1

private int number = 0;應該是private static int number = 0; –

回答

2

使number爲靜態,以便它對您班級的所有實例具有相同的值。

private static int number = 0 

您可能想要將returnNumber更改爲靜態。

如果你希望你的類的每個實例有一個唯一的編號,你應該保持在一個單獨的部件,其數:

public class Test { 

    private int number = 0; 
    private static int counter = 0; 
    public Test(){ 
     number = counter++; 
    } 

    public int getNumber() { 
     return number; // each instance will have a unique value 
    } 

    public static int getCounter() { 
     return counter; // this will return the current value of the counter 
    } 

} 
0

創建變量作爲靜態

private static int number = 0; 
0
public class Test { 

    private static int number = 0; 

    public Test(){ 
     number++; 
    } 

    public int returnNumber(){ 
     return number; 
    } 
} 
2

number需要是static類型,因此它在您班級的所有實例中共享。

改爲考慮private static int number = 0

更好的是,你應該使number原子類型,所以可以在多個線程上調用多個構造函數。 (否則你可能會低估number。)

考慮使用AtomicInteger作爲類型;當然還是static

+0

std :: atomic => AtomicInteger? –

+0

@Ravindrababu:哎呀,一時間流入另一種語言。 – Bathsheba

相關問題