Java - 为什么这两个 类 不能相互通信?

Java - Why won't these two classes communicate with eachother?

我试图通过让 Bil 中的 Bagare() 方法与 Person 中的 bilagare() 对话来让 Bil 从 Person 那里获取名字。我的意图是让 bilagare() 通过 avläsNamn()(也是亲自)获取名称。我究竟做错了什么?我确信有更简单的方法可以做到这一点,但它是 Java-class 中的一项作业,我们必须使用上面提到的 classes 和方法。以下是两个 classes Bil 和 Person

package Objektorientering_kap_4;

import javax.swing.JOptionPane;

public class Bil{

Person ba;

public String regNum(){

    String registrering = JOptionPane.showInputDialog("Ange registreringsnummer, utan mellanslag");

    char l1 = registrering.charAt(0);
    char l2 = registrering.charAt(1);
    char l3 = registrering.charAt(2);
    char n1 = registrering.charAt(3);
    char n2 = registrering.charAt(4);
    char n3 = registrering.charAt(5);

    String N = ""+n1+n2+n3;
    int NS = Integer.parseInt(N);

    if(registrering.length() == 6 && 000 <= NS && NS <= 999 ){

    String regnum = registrering;

    return(regnum);    

    }
    else{

        String error = "Error";
        return(error);

    }


}

public String bilmarke(){

    String marke = JOptionPane.showInputDialog("Ange bilmärke");

    return(marke);

}

public String modell(){

    String bilmodell = JOptionPane.showInputDialog("Ange bilmodell");

    return(bilmodell);

}

public String Bagare(){

    String namn = ba.bilagare();

    return(namn);

}

}

package Objektorientering_kap_4;

import javax.swing.JOptionPane;

public class Person{

private String namn, adress;
private Person makeMaka;

public Person(String n){

    namn = "Sven";

}

public String avläsNamn(){

    return namn;

}

public void sättAdress(String adr){

    adress = adr;

}

public String avläsAdress(){

    return adress;

}

public void bröllop(Person p){

    makeMaka = p;
    p.makeMaka = this;

}

public void skilsmässa(){

    makeMaka.makeMaka = null;
    makeMaka = null;

}

public Person giftMed(){

    return makeMaka;

}

public String bilagare(){

    String agare = avläsNamn();

    return(agare);

}

}

您从未初始化 ba 变量,因此它为 null,您不能通过该 null 引用调用 Person 的任何方法。也许您应该将 Bil 的构造函数传递给 Person 对象。

Person ba 是对人物对象的 引用 ,而不是实际实例。如果你想要一个人对象,你需要写

Person ba = new Person("name");

否则你写的是有效的。

Person ba = null;

所以当你使用 ba 时你会得到 NullPointerException

使用 new 运算符 Person ba = new Person() 创建 Person 对象的实例。