为什么我将null作为String输出?

时间:2019-09-19 16:16:59

标签: java string variables

为什么String变量输出String作为名称和建筑材料?

总是在打印代码时,“名称”和建筑材料上的输出始终为“空”。

public class Mauer{

    private int height;
    private int width;
    private String baumaterial;
    private String Name;

    Mauer(int h, int b, String bm, String n){ 
        this.setD(h,b, baumaterial, Name); 
        }

    public void setD(int h, int b, String bm, String n) {
      this.height=h;
      this.width=b;
      this.baumaterial = bm;
      this.Name = n;


    }

    public int getH() {
        return height; 
        }
    public int getW() { 
        return width; 
        }
    public String getBM() {
        return baumaterial;
        }
    public String getN() {
        return Name;
    }
}

...和第二部分

public class Program extends Mauer{

    Program(int h, int b, String bm, String n) {
        super(h, b,  bm, n);
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args) {
        Mauer m1 = new Mauer(5,10, "Stein", "Burgmauer");
        Mauer m2 = new Mauer(7,12, "Holz", "Holzmauer");

        System.out.println("Die Höhe der Mauer ist " + m1.getH());
        System.out.println(" Die Breite der Mauer ist "+ m1.getW());
        System.out.println(" Das Material besteht aus "+ m1.getBM());
        System.out.println("Der Name der Mauer ist "+m1.getN());

        System.out.println("Die Höhe der zweiten Mauer ist "+ m2.getH());
        System.out.println(" Die Breite der zweiten Mauer ist "+ m2.getW());
        System.out.println(" Das zweite Material besteht aus "+ m2.getBM());
        System.out.println("der Name der zweiten Mauer 2 ist "+ m2.getN());

    }

}

2 个答案:

答案 0 :(得分:0)

您的构造函数会将其具有的空变量作为参数传递给方法。 您应该通过

 this.setD(h, b, bm, n)
例如,

仅定义但未初始化名称,因此Name仍为null,您将其作为参数传递给setD。如果您进行调试,则会看到此信息。

答案 1 :(得分:0)

在Java中,所有实例变量都将初始化为默认值,然后构造函数才有机会对其进行初始化。对于对象,默认值为null

您的Mauer类的构造函数不传递参数bmn,而是传递实例变量baumaterialName。 (普通的Java命名约定将Name命名为name,用小写字母表示。)调用setD时,它实际上将这些变量设置为它们自己-null

检索这些值以进行打印时,+运算符将执行字符串转换,该转换将null转换为字符串"null",您将其视为输出。

修复您的构造函数,将所有4 个参数传递给setD而不是2个。

顺便说一句,在此问题给出的代码中没有明显理由使Program扩展Mauer。您很可能可以删除Program构造函数,并使Program不扩展Mauer