当前位置: 首页 > 面试题库 >

Java:多对象变量(静态)

楚苏燕
2023-03-14
问题内容

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

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

我需要许多对象可以引用的变量,但要为每个对象保留一些“私有”信息。更具体地说,我创建了一个名为的类,Worker并且希望该类的每个对象都具有type的唯一ID
int。因此,第一个对象具有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(因为没有),而是打印静态变量的最后一个值(恰好是对象的数量)。

您能描述我的问题的解决方案吗?


问题答案:

评论转为答案:

您走在正确的轨道上。

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

固定

  • 将您的静态成员重命名为类似的名称,numWorkers以反映其功能
  • 介绍另一个(非静态)成员,id(或workerId如果您愿意)
  • 更改workId++id = ++numWorkers

为什么?

现在,每个工人都有自己的id。您可以通过查看当前已创建的工作人数(numWorkers)进行分配,将该值加1,然后将其分配给id。这样,您的第一个工作人员的ID将为1,第二个工作人员的ID
2以此类推。numWorkers始终保留创建的工作人员数量,这是您分发的最后一个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中,你不需要初始化原始类型
int0,因为这是在默认值的一个int。当然,无论如何都很好-
明确表示永远不会有伤害。



 类似资料:
  • 如何从多个线程同时访问静态变量。 如果我有这样的课 我需要访问线程1的值,比如 从线程2中,我需要设置如下值 这会导致内存冲突吗?。如果是,建议使用什么方法来处理这种情况?。

  • 问题内容: 我正在自学Java,这本书中的其中一项复习练习要求“对象”和“对象变量”之间的区别。 我知道什么是对象(类的特定实例),但是我似乎无法在书中的任何地方(无答案部分)或在互联网上找到术语“对象变量”。 有人知道这个名词的意思吗? 问题答案: 它是“实例变量”的同义词: 显然,该术语并不常用,最好坚持使用“实例变量”以避免任何潜在的歧义。

  • 问题内容: 为什么我们可以通过Java中的对象引用访问静态变量,如下面的代码? 问题答案: 通常,每个人都可以访问公共变量,并且只能从该类的当前实例内部访问私有变量。在您的示例中,您被允许从方法中访问变量,因为该方法在Static类内。 如果您想知道为什么为什么要允许您从静态类的另一个实例(而不是当前实例)访问它(通常不允许使用私有变量),这仅仅是因为静态变量不存在于静态类中。每个实例,但每个班级

  • 问题内容: 我有一个带有静态实例的android java类,其中包含一个用户信息。但是,在极少数情况下,当用户使用我的应用程序时,该静态实例中的变量之一会在一段时间后变为null。该Java类是全局的(未附加到任何活动)。是什么原因造成的? 编辑:该变量永远不会更改,除非在应用程序启动期间。我已经检查过调用它的函数永远不会被调用一次以上(adb logcat证明了当我添加一条日志表明正在被调用时

  • 问题内容: 类的静态成员是否在每个进程或线程中仅作为单个实例存在?意思是每个线程都具有自己的类的静态成员变量副本吗? 我的猜测是每个过程,对吗? 问题答案: 静态 字段 为每个类加载器提供一个值。 如果需要每个线程的值,请设置static 。

  • 问题内容: 根据Java,静态变量可以通过类名访问,但是即使Java不建议使用静态变量,类对象也可以访问它们,并且给出相同的答案。 我知道该变量只有一个副本,并且所有对象和其他事物的值都相同。Java为什么建议使用类名而不是类对象? 问题答案: 因为可能会造成混淆!静态成员上没有动态调度。 看一下这个令人困惑的代码:(可能是语法错误;我的Java生锈了) 看起来很混乱,因为方法似乎是多态的,所以输