如何在不创建新对象的情况下从另一个类中访问变量

5

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

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

Control control = new Control;

int dirtCount = control.dirtCount;

然而,如果我想在我的 dirt 对象中访问这个变量,我必须为每一个创建一个新的 Control 对象。这会造成无尽的循环……

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

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


2
阅读有关类变量和实例变量的内容。 - Sotirios Delimanolis
你听说过静态变量吗?虽然我认为@SotiriosDelimanolis的建议很好。 - Scary Wombat
静态变量/类变量怎么样?请阅读理解类成员 - Aduait Pokhriyal
3个回答

17

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

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

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();

1
由于方法 getDirCount 将是 static,所以您不能在其中使用任何 non-static 字段或方法。请确保您只在 static 方法中使用 static 字段。如果您的 dirCountgetDirCount() 与我发布的相同,则不应该有问题。请检查在声明 dirCountgetDirCount 时是否有 static 关键字。 - Christian Tapia
那不是问题...我可以很好地创建getDirCount方法,但问题在于我不能在Dirt类中除了构造函数之外的任何地方将变量设置为getDirCount。我把这个放在构造函数里。 - htmlhigh5
抱歉,我按了回车键。无论如何,我将这个放在构造函数中:int dirtNumber2 = Control.getDirtCount(); this.dirtNumber = dirtNumber2;,这个方法可以工作,但是我需要每一步更新变量。我有一个每一步更新的方法,但是当我将构造函数中的内容放入其中时,我会得到上次提到的错误。我尝试过将类设置为静态的,但是这样做不起作用,因为我不想让Dirt类中的变量成为静态的。我想我需要将静态变量转换为非静态变量?再次感谢! - htmlhigh5
有没有其他地方我可以给你发消息?我认为向您展示我的脚本并能够编写格式更好的消息会很有帮助...但简而言之,我可以很好地获取Dirt的实例,但它们只能在构造函数中读取“静态”变量“dirtCount”,其他地方都不行。感谢您一直以来的帮助! - htmlhigh5
好的,今天早上发生了最奇怪的事情。我把大部分已经设置好的东西都删除了,重新输入了一遍,现在它可以工作了!第一次肯定是有什么问题。感谢您的帮助! - htmlhigh5
显示剩余4条评论

2
在Java中,一个类可以有两种类型的成员变量:
1) 实例变量 - 它们随着该类的每个对象创建而创建,并且可以通过该类的对象访问。
2) 类变量 - 它们属于类,意味着每个对象都可以共享同一个变量,并且可以通过类名访问。 在Java中的成员变量

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接