任何人都知道如何id
从 1 开始生成,以便下一个对象有 2 等等?
我尝试了以下但不起作用:
class students{
private int id;
private String name;
public student(String name){
this.id=id++;
this.name
}
}
任何人都知道如何id
从 1 开始生成,以便下一个对象有 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 建议的那样,您可能希望将静态计数器设为atomic,这意味着它可以安全地同时使用(即一次在多个线程中使用)。为此,将类型更改为:
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"
生成顺序 ID 的常见解决方案是使用数据库。大多数数据库都有内置的方法来做到这一点。例如,IDENTITY
在 SQL Server 或AUTO_INCREMENT
MySQL 中。
考虑使用像 Hibernate 这样的持久性框架,您可以声明许多经过验证的策略之一,例如身份、hilo 或 uuid,其中一些是顺序的,而另一些则不是。有些是由应用程序生成的,有些是由数据库生成的,但权衡是有据可查的,您会知道自己在做什么。
你应该private int id;
改变 toprivate static int id;
和id++
to ++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;
}
}
测试代码:
public class Test {
public static void main(String[] args) {
Students s1 = new Students("Mark1");
Students s2 = new Students("Mark2");
}
}