Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不创建新对象的情况下从另一个类访问变量_Java_Class_Variables - Fatal编程技术网

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

Java 如何在不创建新对象的情况下从另一个类访问变量,java,class,variables,Java,Class,Variables,我过长的标题说明了一切。。。我希望能够在不创建新对象的情况下从另一个类访问变量 目前,我知道如何访问另一个类的变量的唯一方法是: Control control = new Control; int dirtCount = control.dirtCount; 然而,如果我想在我的污垢对象中访问这个变量,我必须为每个对象创建一个新的控件对象。这创造了一个无休止的循环 如何在不创建新对象的情况下访问变量 (如果您想查看我的代码的其余部分,我可以发布它。我认为这部分是最相关的:)一种方法是将该变

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

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

Control control = new Control;

int dirtCount = control.dirtCount;
然而,如果我想在我的污垢对象中访问这个变量,我必须为每个对象创建一个新的控件对象。这创造了一个无休止的循环

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


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

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

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

控件中
类:

public class Control {
    public static int dirCount;
    // ...
}
您可以在不创建实例的情况下使用它:

int dirCount = Control.dirCount;
注意:

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

public static int getDirCount() {
    return dirCount;
}
您可以使用

int dirCount = Control.getDirCount();

是的,您必须读取一点静态变量。在java中,一个类可以有两种类型的成员变量

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

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


阅读类变量和实例变量。你听说过静态变量吗?虽然我认为@SotiriosDelimanolis的建议很好,但是staic变量/类变量呢。读,谢谢!我以前用过static关键字,但是我把“static”和“final”搞混了!我仍然有一个问题:我将变量设为static,并使getter与您的相同,但是当我试图从另一个类调用它时,我收到了以下错误消息:“无法从类型控件对非静态方法getDirtCount()进行静态引用”。我应该怎么做来纠正这个问题?再次感谢你!由于方法
getDirCount
将是
静态的
,因此不能在内部使用任何
非静态的
字段或方法。确保只在
static
方法中使用
static
字段。如果您的
dirCount
和`getDirCount()`与我发布的内容相同,那么应该不会有问题。在声明
dirCount
getDirCount
时,请检查是否有
static
关键字。这不是问题所在。。。我可以使方法
getDirCount
很好,但问题是除了该类的构造函数之外,我不能在
Dirt
类中将变量设置为
getDirCount
。我把这个放进了构造器对不起,我按了回车键。无论如何,我把它放在构造函数中:
int dirtNumber2=Control.getDirtCount();this.dirtNumber=dirtNumber2,这很有效,但我需要在每一步更新变量。我有一个更新每个步骤的方法,但是我得到了我上次提到的错误,当我把构造函数中的东西放在那里时。我已经尝试过将类设置为静态,但没有成功,因为我不希望
Dirt
类中的变量是静态的。我想我需要做的是把静态变量转换成非静态变量?再次感谢你!如果(对你的程序)有意义,你可以做任何事情
静态
。但这取决于你们班打算做什么。永远不会创建
Dirt
的实例?