在另一个类中访问变量将返回null

时间:2013-02-06 20:00:56

标签: java

好基本上我有三个班级:

  • 主要课程
  • Apple(两个构造函数)

在我要做的主要课程中:

Apple apple = new Apple(String one, String two);

然后Apple类在全球范围内设置它们:

public Apple()
{
    //empty constructor
}
public Apple(String one, String two)
{
    this.one = one;
    this.two = two;
}

然后在Pie课程中我做了:

Apple apple = new Apple();

然后,如果我尝试从Pie类中访问变量'one'或'two',它们将返回null。有人能帮我吗?

2 个答案:

答案 0 :(得分:9)

您正在创建两个不同的对象。如果您希望所有Apple对象具有相同的参数,请将它们声明为static。否则行为是正确的。

更具体地说,您在主类中创建的apple将在其参数中具有所需的值。第二个apple,在Pie类中创建(它是不同的对象,即Apple类的另一个实例),因为它是在没有任何参数的情况下构造的,将调用默认构造函数(即public Apple()),并且值将返回null。

要查看staticnon-static变量之间的差异,请执行以下操作:

class Apple {
    int var;
}

Apple apple1 = new Apple();
apple1.var = 10;
Apple apple2 = new Apple();
apple2.var = 5;
System.out.println(apple1.var+"\t"+apple2.var);

打印:

10     5

但如果是static,你会得到

class Apple {
    static int var;
}

Apple apple1 = new Apple();
apple1.var = 10;
Apple apple2 = new Apple();
apple2.var = 5;
System.out.println(apple1.var+"\t"+apple2.var);

输出将是:

5     5

有关何时使用 static 的更多信息,请查看:

Java: when to use static methods

答案 1 :(得分:0)

因此Apple类中的Pie与您在Main中创建的不同的Apple 相同。因此,当您调用空构造函数时,onetwo未在您的饼Apple中设置,而它们位于主Apple中。如果你真的希望它们是相同的,请尝试从Pie中引用main Apple,或使Apple为静态。

相关问题