谁知道如何从1开始生成id,这样下一个对象就会有2,依此类推?
我尝试了以下方法,但不起作用:
class students{
private int id;
private String name;
public student(String name){
this.id=id++;
this.name
}
}发布于 2012-09-09 10:22:19
您需要一个静态类成员来跟踪上次使用的索引。确保还实现了一个复制构造函数:
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;
}
// ...
}更新:正如@若丹怀特建议的那样,你可能想让静态计数器成为原子的,这意味着同时使用它将是安全的(即同时在多个线程中使用)。为此,请将类型更改为:
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"发布于 2012-09-09 11:22:24
请注意,在非常有限的情况下,使用静态变量来跟踪计数器的工作。
您不能在多台机器上运行此代码,例如,如果是web应用程序,则运行web集群。此外,静态变量是暂时的,在您重新启动应用程序时将重置。
生成顺序id的常见解决方案是使用数据库。大多数数据库都有一种内置的方法来实现这一点。例如,SQL Server中的IDENTITY或MySQL中的AUTO_INCREMENT。
考虑使用Hibernate这样的持久性框架,您可以声明许多成熟的策略中的一种,比如identity, hilo or uuid,其中一些是顺序的,一些不是,一些是由应用程序生成的,另一些是由数据库生成的,但是权衡有很好的文档记录,您将知道自己将陷入什么境地。
发布于 2012-09-09 10:34:28
你应该把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");
}}
https://stackoverflow.com/questions/12336030
复制相似问题