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();
}
}
据我所知,因为int是静态的,两个id都是相同的但是无法弄清楚为什么输出是2而不是1?
运行时输出:
Kind: falcon, Id: 2; Kind: eagle, Id: 2;
答案 0 :(得分:5)
它是一个静态变量。由所有对象实例共享。你创建了两个对象,因此通过构造函数递增两次..说实话我看不出还有什么可以添加到答案中。
//where [x] denotes id:
First instance: id = [0] + 1; //id is 1
Second instance id = [1] + 1 // id is 2
嗯..如果你想拥有一个唯一的id,你可以拥有一个对象独有的额外字段,我认为这可以解决你的问题:
private int Id;
private static int tracker;
public Bird()
{
//keep track of object instances, yet each increment is unique to a particular
//object
Id = ++tracker;
}
答案 1 :(得分:1)
由于id
为static
,因此Bird
的所有实例共享该id
。您创建了2个对象,2
增加了两次,因此,当您尝试为每个id
实例打印Bird
时,会打印{{1}}。
答案 2 :(得分:0)
static
变量由所有创建的对象共享,它被初始化一次,因此每次创建新对象时都不会初始化。
由于id的初始值为0,您创建了两个新对象。因此,该值将增加两次,新值将为2.