第一组和第二组都有id 0吗?我究竟做错了什么?我只是想在每次创建一个新对象时自动增加id。
这是来自 Team.java
的代码public class Team{
private int teamId;
public Team(){
this.teamId= teamId++;
}
public void printTeamId(){
System.out.println(this.teamId);
}
}
这是来自 Main.java
的代码public class Main {
public static void main(String[] args) {
Team one= new Team();
Team two= new Team();
one.printTeamId();
two.printTeamId();
}
}
答案 0 :(得分:7)
您需要一个额外的静态变量来存储团队数量。 Static
表示所有对象共享此变量。每个团队都拥有自己的变量teamId
,但共享变量teamIdCounter
public class Team{
private int teamId;
private static int teamIdCounter = 0;
public Team(){
this.teamId= teamIdCounter++;
}
public void printTeamId(){
System.out.println(this.teamId);
}
}
如果您使用多个线程,请检查有关如何使用AtomicInteger计算对象线程安全的其他答案。
答案 1 :(得分:4)
关于静态变量是好的,但如果你想要线程安全,请使用Atomic Integer。
public class Team{
private int teamId;
private static AtomicInteger atomicInteger = new AtomicInteger(0);
public Team(){
this.teamId= atomicInteger.incrementAndGet();
}
public void printTeamId(){
System.out.println(this.teamId);
}
}
这将使一个线程安全计数器而不是一个不是线程安全的静态计数器。
答案 2 :(得分:-1)
让你的teamId变量静态&用一些整数值初始化它(建议为-1)。
使用初始值-1导致第一个teamId = 0。