从 Java 中的两个不同类中设置和获取静态变量
Posted
技术标签:
【中文标题】从 Java 中的两个不同类中设置和获取静态变量【英文标题】:Set and get a static variable from two different classes in Java 【发布时间】:2012-01-05 05:09:48 【问题描述】:假设我有 3 个类:A
、Data
和 B
我从 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 中的两个不同类中设置和获取静态变量的主要内容,如果未能解决你的问题,请参考以下文章
通过字符串变量在Python中设置和获取@property方法