自动生成id

任何人都知道如何从1开始生成id ,以便下一个对象有2,依此类推?

我尝试了以下但不适用:

 class students{ private int id; private String name; public student(String name){ this.id=id++; this.name } } 

您需要一个静态类成员来跟踪上次使用的索引。 一定要实现一个复制构造函数:

 class students { private static int next_id = 0; // <-- static, class-wide counter private int id; // <-- per-object ID private String name; public students(String name) { this.id = ++students.next_id; this.name = name; // ... } public students(students rhs) { this.id = ++students.next_id; this.name = rhs.name; // ... } public static void reset_counter(int n) // use with care! { students.next_id = n; } // ... } 

更新:正如@JordanWhite建议的那样,您可能希望将静态计数器设为primefaces ,这意味着它可以安全地同时使用(即一次使用多个线程)。 为此,请将类型更改为:

 private static AtomicInteger next_id = new AtomicInteger(0); 

增量和读操作以及重置操作变为:

 this.id = students.next_id.incrementAndGet(); // like "++next_id" students.next_id.set(n); // like "next_id = n" 

请注意,使用静态变量来跟踪您的计数器是否在非常有限的情况下工作。

如果是Web应用程序,则无法在多台计算机上运行此代码,例如Web集群。 此外,静态变量是瞬态的,并在重新启动应用程序时重置。

生成顺序id的常见解决方案是使用数据库。 大多数数据库都有内置的方式来做到这一点。 例如,SQL Server中的IDENTITY或MySQL中的AUTO_INCREMENT

考虑使用像Hibernate这样的持久性框架,您可以声明许多经过validation的策略之一,例如identity,hilo或uuid ,其中一些是顺序的,而另一些则不是。 有些是由应用程序生成的,有些是由数据库生成的,但权衡结果已有详细记录,您将了解自己正在做什么。

你应该private int id; private static int id;id++++id

你可以试试:

 class Students{ private static int id; private String name; public Students(String name){ this.id=++id; // this.id +=1;may be better System.out.println(this.id); this.name = name; } } 

TestCode:

 public class Test { public static void main(String[] args) { Students s1 = new Students("Mark1"); Students s2 = new Students("Mark2"); } 

}