2012-10-21 229 views
2

我創建汽車對象和我保持與變量,創建汽車數量的計數的過程中加入一個變量到對象的名稱「的值carCounter。」 CarCounter從0開始,我想命名Car objects car(carCounter),並在每次創建汽車時增加計數器,以便汽車命名爲car0,car1,car2等...我怎麼能在做對象的創建?創建對象

喜歡的東西租車()車(+ carCounter +)=新車(); ?

+0

你的'Car'是什麼樣的? –

回答

1

您可以維護一個static counter變量,並且每次創建class的實例時,增加該變量併爲該實例設置該變量。

public class YourClass { 
    private static counter = 0; 
    private String name; 

    public YourClass() { 
     name = "car" + counter; 
     counter++; 
    } 
} 
+0

把靜態計數器放在Car的構造函數中,會像魅力一樣工作... – Frank

+0

哇,嗯。很簡單。我不知道爲什麼我沒有想到它..謝謝!只是一個問題。我將如何實例化類的一個對象?只需輸入'新車'? – user939287

+0

@ user939287。有些事情你突然知道了。所以不應該是一個驚喜。一般來說,只有在你需要時纔會學習。 :) –

2

我想你想要的是一個Array

Car[] cars = new Car[3]; 
cars[0] = new Car(); 
cars[1] = new Car(); 
cars[2] = new Car(); 

這也可以讓你通過varaible參考指數(什麼你調用數):

int n = 1; 
Car carAtIndexN = cars[n]; 

如果你要初始化一個整套的汽車,最好在一個循環中這樣做:

int totalCarCount = 10; 

Car[] cars = new Car[totalCarCount]; 

for (int i=0; i<totalCarCount; i++) { 
    cars[i] = new Car(); 
} 
0
public Class Car { 
    public static int counter= 0; 
    String name=""; 
    public Car() { 
     counter++; 
     name= "car"+ counter; 
    }; 
} 

那就是都爲汽車類。

0

爲了保持線程安全的,我會建議使用static AtomicLong變量的任務,這將遞增,如在構造函數的最後一個命令。這樣,如果構造函數中有Exception,則計數器將保持不變。

public final class Car { 
    private static AtomicLong carCounter = new AtomicLong(); 
    public Car() { 
     //do the dirty things here 
     carCounter.incrementAndGet(); 
    } 
    public static long getCounterValue() { 
     return carCounter.get(); 
    } 
} 

我還要使課堂final,因爲如果一個類繼承了這一個,反被保存後,它的構造可以執行的操作,這將留在不一致的狀態的東西(計數器不能反映創建實例)的數...

有了這麼多的限制,這是不是一個非常有用的情況下,是不是?我認爲最好的解決方案是使用abstract factory來創建實例,並跟蹤計數器。也許抽象工廠應該是一個Singleton ...