Java报错空指针异常怎么改


//科目类
public class Subject {
private String sno;
private String subName;
private Teacher[] teaArr;

public Teacher[] getTeaArr() {
    return teaArr;
}
public void setTeaArr(Teacher[] teaArr) {
    this.teaArr = teaArr;
}

public String getSno() {
    return sno;
}
public void setSno(String sno) {
    this.sno = sno;
}
public String getSubName() {
    return subName;
}
public void setSubName(String subName) {
    this.subName = subName;
}
public Subject(){}
public Subject(String sno, String subName) {
    super();
    this.sno = sno;
    this.subName = subName;
}
public Subject(String sno, String subName, Teacher[] teaArr) {
    super();
    this.sno = sno;
    this.subName = subName;
    this.teaArr = teaArr;
}


}

//老师类

public class Teacher {
private String tName;
private String tAge;
private String tNo;
private Subject subs;
public Teacher(String tName, String tAge, String tNo, Subject subs) {
    super();
    this.tName = tName;
    this.tAge = tAge;
    this.tNo = tNo;
    this.subs = subs;
}
public Subject getSubs() {
    return subs;
}
public void setSubs(Subject subs) {
    this.subs = subs;
}
public String gettName() {
    return tName;
}
public void settName(String tName) {
    this.tName = tName;
}
public String gettAge() {
    return tAge;
}
public void settAge(String tAge) {
    this.tAge = tAge;
}
public String gettNo() {
    return tNo;
}
public void settNo(String tNo) {
    this.tNo = tNo;
}
public Teacher(){}
public Teacher(String tName, String tAge, String tNo) {
    super();
    this.tName = tName;
    this.tAge = tAge;
    this.tNo = tNo;
}

}

//测试类
//输出语句报错:Exception in thread "main" java.lang.NullPointerException

public class Test2 {
public static void main(String[] args) {
    Teacher t1 = new Teacher("t1","42","1200");
    Teacher t2 = new Teacher("t2","22","1202");
    Teacher t3 = new Teacher("t3","62","1203");
    Teacher[] tea = {t1,t2,t3};
    Subject chinese = new Subject("2020","chinese",tea);
    for(Teacher y:chinese.getTeaArr()){
        System.out.println(y.gettName()+"--"+y.gettNo()+"--"+y.gettAge()+"--"+y.getSubs().getSno()+"--"+y.getSubs().getSubName());
    }
}
}

teacher 的 subs 没有初始化,还是null

img

修改如下:

public static void main(String[] args) {
        Teacher t1 = new Teacher("t1","42","1200");
        Teacher t2 = new Teacher("t2","22","1202");
        Teacher t3 = new Teacher("t3","62","1203");
        Teacher[] tea = {t1,t2,t3};
        Subject chinese = new Subject("2020","chinese",tea);
        t1.setSubs(chinese);
        t2.setSubs(chinese);
        t3.setSubs(chinese);
        for(Teacher y:chinese.getTeaArr()){
            System.out.println(y.gettName()+"--"+y.gettNo()+"--"+y.gettAge()+"--"+y.getSubs().getSno()+"--"+y.getSubs().getSubName());
        }
    }

你这是在搞什么,为什么Teacher会有3个参数和4个参数两个不同的构造函数
你后面全部调用的是3个参数的构造函数,4个参数的没有调用,导致其中一个成员没有赋值