在Java中设置并获取来自两个不同类的静态变量

use*_*898 5 java variables methods class overwrite

可以说我有3类:A,Data,和B

我从类中传递一个变量,A该变量将传递的变量设置为类中的私有变量Data.

然后在课堂上B,我想调用已经改变的特定变量.

所以我这样做

Data data = new Data();
data.getVariable();
Run Code Online (Sandbox Code Playgroud)

然后它将返回null,因为在类DataI 中将变量初始化为空(ex :) int v;,我认为该类B正在初始化一个全新的类并将值重置为默认值,但我不知道如何解决这个问题.

我知道变量设置正确,因为在课堂上A如果我这样做data.getVariable()将打印设置的变量.

课程A:

Data data = new Data();
int d = 1;
data.setVariable(d);
Run Code Online (Sandbox Code Playgroud)

课程Data:

private static int b;

public void setVariable(int s)
{
    b = s;
}

public int getVariable()
{
    return b;
}
Run Code Online (Sandbox Code Playgroud)

课程B:

Data data = new Data();
private int v; 

v = data.getVariable();
System.out.println(v);
Run Code Online (Sandbox Code Playgroud)

这将打印出0而不是实际值

Jon*_*uis 11

当你实例化一个DataA类对象,实例化另一个Data在B类对象,它们是两个不同的实例中的Data类.它们d默认情况下都实例化为0.然后setVariable,您调用A类中的实例并将值传递给1; 但是B类中的实例保持为0.为了更改B类中实例的值,您需要调用setVariableB类中的实例.

您正在寻找的是静态成员.静态成员在同一个类的所有实例中都是相同的.只需将static关键字放在要使用它的方法或字段之前.通常使用声明它们的类的名称(即MyClass.doMethod())访问静态成员和字段.例如:

班级数据(更新):

private static int b;

public static void setVariable(int s)
{
    b = s;
}

public static int getVariable()
{
    return b;
}
Run Code Online (Sandbox Code Playgroud)

A类:

Data.setVariable(d);
Run Code Online (Sandbox Code Playgroud)

B级:

v = Data.getVariable();
System.out.println(v);
Run Code Online (Sandbox Code Playgroud)

  • 这些方法不需要是静态的.他仍然可以使用"new"并使方法非静态.变量就足够了 (2认同)