例如,我有一个名为Member的类,它基本上创建了一个可以登录网站的成员。每当创建此对象的实例时,需要在构造函数中初始化5个事物,其中一个是成员编号。该会员编号必须是唯一的。我有一个想法是每当创建一个Member对象时就为数字添加加号。
这是我目前的代码:
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;
}
请忽略loginStatus,随播广告和资金。
正如您所看到的,我已将会员编号的默认值设置为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初学者。
答案 0 :(得分:1)
为什么这会使用数字? 而是使用UUID创建唯一的MembershipNumber。这将保持独特性,你不必为此努力。
查看与Java 5及更高版本捆绑在一起的UUID class。
使用随机UUID,您可以使用randomUUID方法。
编辑: 如果您计划以并发方式创建对象并且仍然需要增量memberId,则只需存储静态AtomicNumber并使用atomicNumber.incrementAndGet()来获取“new”userID
查看更多here
至于你给出的例子: 在第一个例子中 - 你在构造函数中初始化membershipNumber的值,这使得它总是为1,就像你描述的那样。
在第二个例子中,除非membershipNumberTwo
是 static ,否则它将在每个新类的构造中初始化,因此每次初始化为0.你需要在一个物体的构造与另一个物体之间保持状态。
答案 1 :(得分:0)
您需要为该类设置静态字段,因此它不是实例绑定的。将membershipNumber
设为Member
类中的静态字段。
答案 2 :(得分:0)
在示例1中,您将值设置为0
,然后添加1
,因此始终为1
。
在示例2中,我猜membershipNumberTwo
不是static
,因此默认情况下每个实例中的值为0
,总是0
。只需在该变量中添加static
修饰符,即可将值存储在类级别,而不是实例级别。
这是最基本的解决方案。
只需使用静态变量即可。 使用该值初始化成员变量,不要忘记在每个构造函数调用上增加静态值。
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
}
...
}
这不会持久,每次执行应用程序时都会重置该值。
答案 3 :(得分:0)
您必须使用静态变量。尝试使用这样的东西。 一个staic变量,用于存储下一个MemberShip编号,并在创建时使用该变量查找每个新成员的成员编号。 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;
}