为什么我的Java代码返回空值(访问器和增变器)?

时间:2015-09-09 01:38:21

标签: java null accessor mutators

我试图让这个Accessor / Mutator组合下来,我遇到了麻烦。我正在学习java,这是我不能做的一件事。

public class Airport extends mainClass {

public String ID;


//Accessor
public String getID() {return this.ID;}


//Mutator
public void setID(String ID){this.ID = "SAN";}

}

并扩展了下面显示的主要部分。

   public class mainClass {
public static void main(String[] args) {
    Airport SanDiego = new Airport();
    System.out.println(SanDiego.getID());
}
}

运行时,输出为" null"。关于如何从主窗体中获取ID以不返回null的建议以及如何清理代码将非常感谢,谢谢。

3 个答案:

答案 0 :(得分:2)

正如cacho所说,你没有为ID分配值。

为了提供更详尽的解释,Java的默认构造函数是一个无效的构造函数 - 这意味着它将调用超类的构造函数,然后它将分配"空白"所有类字段的值(引用变为null,整数变为0等)。

虽然cacho的解决方案可行,但你也可以定义一个这样的构造函数:

public class Airport extends mainClass {
//...

//Constructor
public Airport(String ID){this.ID = ID;}
}

此外,您的setID非常奇怪 - 它始终将ID设置为" SAN"。我想你可能想要这样的东西:

public void setID(String ID){this.ID = ID;}

当然,您现在可以使用新的构造函数:

Airport SanDiego = new Airport("SAN");

答案 1 :(得分:0)

您没有在任何地方调用方法setID( ),这就是原因。

试试这个:

public class mainClass {
    public static void main(String[] args) {
        Airport SanDiego = new Airport();
        SanDiego.setID("this string is not important, since you are setting the value to SAN anyway");
        System.out.println(SanDiego.getID());
    }
}

那应该有用。但是,我无法理解你在这里想要达到的目标。

答案 2 :(得分:0)

首先需要设置ID属性,方法是使用为ID传入的参数重载默认构造函数,或者在实例化对象后调用setID()。