4

好的,基本上我有三个课程:

  • 主班
  • 苹果(两个构造函数)
  • 馅饼

在我做的主要课程中:

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 类访问变量“一”或“二”,它们将返回 null。有人能帮我吗?

4

3 回答 3

10

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

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

static要查看 a和变量之间的区别,non-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

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

Java:何时使用静态方法

于 2013-02-06T20:02:09.187 回答
1

对于默认构造函数,要让一个或两个不为空,您需要使用一些默认的非空值设置苹果实例:

class Apple {
    public Apple()
    {
        this("1", "2");
    }
    public Apple(String one, String two)
    {
        this.one = one;
        this.two = two;
    }
    //...
}
于 2013-02-06T20:04:41.190 回答
0

因此Apple,属于Pie该类的Apple与您在其中创建的Apple 不同Main。因此,当您调用空构造函数one并且two未在 pie 中设置时Apple,它们在 main 中Apple。如果您真的希望它们相同,请尝试Apple从 Pie 中引用 main ,或设为Apple静态。

于 2013-02-06T20:05:04.037 回答