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

时间:2011-11-23 22:49:35

标签: java class variables methods overwrite

假设我有3个课程:ADataB

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

然后在课程B中,我想调用已更改的特定变量。

所以我做了

Data data = new Data();
data.getVariable();

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

我知道变量设置正确,因为在A类中如果我data.getVariable(),它将打印已设置的变量。

班级A

Data data = new Data();
int d = 1;
data.setVariable(d);

班级Data

private static int b;

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

public int getVariable()
{
    return b;
}

班级B

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

v = data.getVariable();
System.out.println(v);

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

2 个答案:

答案 0 :(得分:10)

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

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

班级数据(已更新):

private static int b;

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

public static int getVariable()
{
    return b;
}

A类

Data.setVariable(d);

B类

v = Data.getVariable();
System.out.println(v);

答案 1 :(得分:1)

编辑 - 我的第一个建议是将static用于变量b,并且作者在添加该建议时更改了他的问题。

它修复了你想要做的事情。我在编译代码中编写示例:

    public class Demo {
        public static void main(String[] args) {
            A a = new A();
            B b = new B();
            a.doWhatever();
            b.doSomethingElse();
        }
    }
    class Data {
        private static int b;

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

        public int getVariable()
        {
            return b;
        }
    }
    class A {
        public void doWhatever() {
            Data data = new Data();
            int d = 1;
            data.setVariable(d);
        }
    }

    class B {
        Data data = new Data();
        private int v; 
        public void doSomethingElse() {
            v = data.getVariable();
            System.out.println(v);
        }
    }