假设我有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而不是实际值
答案 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);
}
}