每当在 Java 内创建对象时,如何为现有数字加 1?

How to add plus 1 to an existing number whenever the object is created within Java?

例如,我有一个名为 class 的成员,它基本上创建了一个可以登录网站的成员。每当创建此对象的实例时,都需要在构造函数中初始化 5 件事,其中之一是成员编号。此会员编号必须是唯一的。我的一个想法是在创建成员对象时将数字加 1。

这是我当前的代码:

    public Member(String newEmail, int newMoney)
    {
    // Intialises the email.
    email = newEmail;
    // Intialises the membership number.
    membershipNumber = 000;
    membershipNumber =+ 001;
    // Intialises the login status.
    loginStatus = false;
    //
    companions = new ArrayList<Friend>();
    // Intialises the members money.
    money = newMoney;
    }

请忽略登录状态、同伴和金钱。

如您所见,我已将会员编号的默认值设置为 000,并为其添加 +1,但是每个创建的会员,现在无论我创建多少,会员编号都是总是 1.

我通过添加整个其他字段尝试了另一种方法,例如:

   public Member(String newEmail, int newMoney)
   {
    // Intialises the email.
    email = newEmail;
    // Intialises the membership number.
    membershipNumber = membershipNumberTwo;
    membershipNumberTwo =+ 001;
    // Intialises the login status.
    loginStatus = false;
    //
    companions = new ArrayList<Friend>();
    // Intialises the members money.
    money = newMoney;
    }

但是会员号一直是0

任何人都可以帮我解决这个问题,只要在构造函数中创建会员时,会员号就会添加 +1 吗? 谢谢

免责声明:我处于 Java 的初级水平。

您需要将 class 的字段设为静态,这样它就不受实例限制了。将 membershipNumber 作为 Member class.

中的静态字段

为什么要使用数字? 相反,使用 UUID 创建一个唯一的 membershipNumber。这将保持唯一性,您不必为此努力工作。

查看 UUID class 与 Java 5 及更高版本捆绑在一起。

使用随机 UUID 你可以使用 randomUUID 方法。


编辑: 如果您计划并发创建对象并且仍然想要增量 memberId,只需存储一个静态 AtomicNumber 并使用 atomicNumber.incrementAndGet() 来获取 'new' userID

查看更多here


至于你举的例子: 在第一个示例中 - 您在构造函数中初始化了 membershipNumber 的值,这导致它始终为 1,就像您描述的那样。

在第二个例子中,除非 membershipNumberTwostatic,它会在每次构造新的 class 时被初始化,所以每次它'将被初始化为 0。您需要在一个对象的构造与另一个对象之间保持状态。

在示例 1 中,您将值设置为 0,然后添加 1,因此它始终是 1

在示例 2 中,我猜想 membershipNumberTwo 不是 static,因此在每个实例中默认值为 0,始终为您提供 0。只需向该变量添加 static 修饰符即可将值存储在 class 级别,而不是实例级别。


这是最基本的解决方案。

简单地使用一个静态变量。 使用该值来初始化成员变量,并且不要忘记在每次构造函数调用时增加静态值。

class Member{
    private static int membershipNumberCount = 0;
    private int membershipNumber;

    public Member(){
        membershipNumber = membershipNumberCount;
        membershipNumberCount++; //Could be done on the same line but keep it simple
    }
    ...
}

这不会持久,每次执行应用程序时都会重置该值。

你必须使用静态变量。尝试使用这样的东西。 一个静态变量来存储下一个会员号,并在创建时使用它来查找每个新会员的会员号。 see this

private static int NextMemberNumber = 1;
private int membershipNumber;
public Member(String newEmail, int newMoney)
{
// Intialises the email.
email = newEmail;
// Intialises the membership number.
membershipNumber =NextMemberNumber;
NextMemberNumber = NextMemberNumber + 1;
// Intialises the login status.
loginStatus = false;
//
companions = new ArrayList<Friend>();
// Intialises the members money.
money = newMoney;
}