从 Java 中的两个不同类中设置和获取静态变量

Posted

技术标签:

【中文标题】从 Java 中的两个不同类中设置和获取静态变量【英文标题】:Set and get a static variable from two different classes in Java 【发布时间】:2012-01-05 05:09:48 【问题描述】:

假设我有 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 而不是实际值

【问题讨论】:

请提供您的代码,而不仅仅是您的类的描述。 我的所有 3 个类的代码都超过 800 行,所以我只是编造了我目前在其中测试的内容......我不知道 extends 有什么作用,所以如果你能解释一下更好,如果它可以解决我的解决方案,那么我会尝试它。 如果我扩展了 B 类中的数据,它仍然不起作用 B 类定义永远不会编译。请出示代码。 所缺少的只是公共课。 【参考方案1】:

当您在 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);

【讨论】:

方法不需要是静态的。他仍然可以使用“新”并且使用非静态方法。变量就够了 即使在方法之前加上静态,它仍然会给我 0。 好吧,我似乎已经解决了我声明变量并分配它们以获取数据的问题。 @Avempace:虽然技术上“正确”,但我认为这是糟糕的设计。 我想我做了同样的事情。我在类 SharedUtils 中有一个名为 x 的变量,其默认值为 -1 。我已经在一个地方设置了SharedUtils.x = 1,但后来当我检查变量的值时,它显示了-1 的默认值,而不是我设置的值。我在这里错过了什么吗?【参考方案2】:

编辑 - 我的第一个建议是使用 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);
        
    

【讨论】:

这个方法有效,但是当我在 B 类中打印出 V 时,它仍然显示为 null。我再次用静态更新了主代码。 我有点困惑。它如何打印“null”?它是一个整数 好的,我正在做一个例子,在我的例子中它是一个字符串,但无论如何它都没有关系,因为整数将打印出 0 而不是实际值,我的错。所以只需将 null 替换为 0。 它显示 0,而不是 null。无论如何,0 不是正确的值,它应该显示 6。我无法打印出整个代码,因为它太长了。 当时不确定,我查看了我拥有的东西,它正在做完全相同的事情。我会继续查看你的,看看我是否遗漏了什么。感谢您的帮助

以上是关于从 Java 中的两个不同类中设置和获取静态变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中设置和获取会话变量?

text 在Phalcon中设置和获取会话变量

如何在Jmeter中设置和获取环境变量来测试API

通过字符串变量在Python中设置和获取@property方法

如何在 Kendo UI MVC 的网格中设置和获取下拉列表的值?

在 django 模板中设置和重置变量的值