2012-10-21 188 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 ...