每当在 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,就像您描述的那样。
在第二个例子中,除非 membershipNumberTwo
是 static,它会在每次构造新的 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;
}
例如,我有一个名为 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,就像您描述的那样。
在第二个例子中,除非 membershipNumberTwo
是 static,它会在每次构造新的 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;
}