无论何时在Java中创建对象,如何向现有数字添加加1?

时间:2017-12-13 13:26:12

标签: java object bluej

例如,我有一个名为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初学者。

4 个答案:

答案 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;
}