gpt4 book ai didi

Java:多对象变量(静态)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:41:27 24 4
gpt4 key购买 nike

我是面向对象编码的新手,我遇到了以下问题。

(注意 this 解决方案是我问题的一部分)

我需要一个许多对象都可以引用的变量,但要为每个对象保留一些“私有(private)”信息。更具体地说,我创建了一个名为 Worker 的类,我希望该类的每个对象都有一个 int 类型的唯一 ID。所以,第一个对象有 ID=1,第二个对象有 ID=2 等...请注意,我不想要一个随机整数,而我需要从0 和递增...

类中变量的声明和初始化

static private int workId = 0;

我试图通过在构造函数体中添加这行代码来实现自增

workId++;

我实例化一些对象,将它们添加到 ArrayList 并使用 for 循环打印每个对象的变量。

System.out.println("Worker ID: "+workerList.get(i).getWorkerId());

getWorkerId()(类方法)组成

public int getWorkerId () { return this.workId; }

问题是我的程序不会打印每个唯一的 workID(因为没有),而是打印静态变量的最后一个值(恰好是对象的数量)。

你能描述一下我的问题的解决方案吗?

最佳答案

评论转答案:

您走在正确的轨道上。

目前,您的静态成员将随着您创建的每个工作人员而增加。这意味着它不会保存 worker 的 ID(这不可能是这种情况,因为静态变量属于而不是单个实例),而是保存到目前为止,您创建的 worker 总数

修复

  • 将您的静态成员重命名为类似numWorkers 的名称,以反射(reflect)它的作用
  • 引入另一个(非静态)成员,id(或 workerId,如果您愿意)
  • workId++ 更改为 id =++numWorkers

为什么?

现在,每个 worker 都有自己的id。您可以通过查看当前创建的 worker 数量 (numWorkers) 来分配它,将该值递增 1,然后将其分配给 id。这样,您的第一个 worker 的 ID 将为 1,第二个将为 2,依此类推。 numWorkers 始终保存创建的 worker 数量,同时也是您分发的最后一个 ID。


放在一起

由于这个问题得到了很多赞成票(=兴趣),我将把以上内容总结成一个蓝图:

public class Worker {
private static int numWorkers; // Number of Worker objects created
private int id; // Individual ID of a worker

public Worker() {
id = ++numWorkers; // Will be 1 for the first, 2 for the second, ...
}

public int getID() {
return id;
}

public static int getNumWorkers() {
return numWorkers;
}
}

请注意,在 Java 中,您不需要初始化 primitive type int0,因为那是 default value对于 int。当然,无论如何都可以这样做 - 明确无误。

关于Java:多对象变量(静态),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43394634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com