在java中自动增加id

时间:2018-03-05 12:56:38

标签: java

第一组和第二组都有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();
    }
}

3 个答案:

答案 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。