【问题标题】:How to Access Variable from Another Class without Creating New Object如何在不创建新对象的情况下从另一个类访问变量
【发布时间】:2014-03-25 06:10:46
【问题描述】:

我过长的标题说明了一切......我希望能够在不创建新对象的情况下访问另一个类的变量。

目前我知道如何访问另一个类的变量的唯一方法是:

Control control = new Control;

int dirtCount = control.dirtCount;

但是,如果我想在我的污垢对象中访问这个变量,我必须为每个对象创建一个新的 Control 对象。这就造成了一个无限循环……

如何在不创建新对象的情况下访问变量?

(如果您想查看我的其余代码,我可以发布它。我认为这部分是最相关的 :))

【问题讨论】:

  • 阅读类变量和实例变量。
  • 你听说过静态变量吗?虽然我认为@SotiriosDelimanolis 的建议很好。
  • 静态变量/类变量怎么样。阅读Understanding Class Members

标签: java class variables


【解决方案1】:

一种方法是将该变量声明为static,这意味着它是一个类变量(它不同于实例变量)。来自Java Tutorial(强调我的):

它们与类相关联,而不是与任何对象相关联。类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量

Control 类中:

public class Control {
    public static int dirCount;
    // ...
}

你可以在不创建实例的情况下使用它:

int dirCount = Control.dirCount;

注意:

如果您希望该变量为private,您可以定义一个static getter 方法:

public static int getDirCount() {
    return dirCount;
}

你可以调用那个方法

int dirCount = Control.getDirCount();

【讨论】:

  • 谢谢!我以前使用过 static 关键字,但我把“static”和“final”搞混了!我仍然有一个问题:我将变量设置为静态,并设置了与您相同的 getter,但是当我尝试从其他类调用它时,我收到以下错误消息:“无法对非静态对象进行静态引用来自 Control 类型的方法 getDirtCount()”。我应该怎么做才能纠正这个?再次感谢您!
  • 由于方法getDirCount 将是static,因此您不能在其中使用任何non-static 字段或方法。确保只在 static 方法中使用 static 字段。如果您有与我发布的相同的dirCount 和`getDirCount()`,那么应该没有问题。在声明dirCountgetDirCount 时,请检查您是否有static 关键字。
  • 这不是问题...我可以使方法getDirCount 很好,但问题是我无法将Dirt 类中的变量设置为getDirCount但该类的构造函数。我把它放在构造函数中
  • 抱歉,我按下了回车键。无论如何,我把它放在构造函数中:int dirtNumber2 = Control.getDirtCount(); this.dirtNumber = dirtNumber2;,这行得通,但我需要每一步都更新变量。我有一个更新每一步的方法,但是当我将构造函数中的内容放在那里时,我得到了我上次提到的错误。我尝试将类设为静态,但这不起作用,因为我不希望 Dirt 类中的变量是静态的。我想我需要做的是将静态变量转换为非静态变量?再次感谢您!
  • 如果它有意义(对于您的程序),您可以做任何事情static。但这取决于您的班级打算做什么。 Dirt 的实例永远不会被创建?
【解决方案2】:

在java中一个类可以有两种类型的成员变量

1) 实例变量 - 它们由该类的每个对象创建,并且可以由该类的对象访问。

2) 类变量 - 它们属于类意味着每个对象都可以共享相同的变量,并且可以通过类名访问

【讨论】:

    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多