我试图在此处访问对象中的对象。以下是三个类。我简化了它,使其产生与整个程序相同的错误。 这是主要课程。
import java.util.Scanner;
public class TestMain
{
public static void main (String[] args)
{
createStudent();
}
public static Student createStudent()
{
Student another = new Student();
another.depart(101,"CS");
return another;
}
}
第二个,
public class Student
{
private int sid;
private String sname;
private Department department;
public int getSid()
{
return sid;
}
public String getSname()
{
return sname;
}
public void depart(int departid, String departname)
{
department.setDid(departid);
department.setDname(departname);
}
public void setSid(int stusid)
{
this.sid = stusid;
}
public void setSname(String stusname)
{
this.sname = stusname;
}
}
第三个,
public class Department
{
private int did;
private String dname;
public int getDid()
{
return did;
}
public String getDname()
{
return dname;
}
public void setDid(int deptdid)
{
this.did = deptdid;
}
public void setDname(String deptdname)
{
this.dname = deptdname;
}
}
无论我做什么,该程序都会返回运行时错误,
Exception in thread "main" java.lang.NullPointerException
at Student.depart(Student.java:17)
at TestMain.createStudent(TestMain.java:13)
at TestMain.main(TestMain.java:7)
什么是NullPointerException
?如何避免这种情况?请帮助我。
答案 0 :(得分:1)
问题在于,当您创建一个Student对象时,您需要初始化每个成员对象,即department
对象为null,因此当您执行department.setDid(101)
时,它将返回一个异常。
要解决此问题,请为Student类创建一个自定义构造函数,如下所示:
Student()
{
department = new Department();
sid = 0;
sname = "";
}
编辑:正如Sebastian在下面的注释中正确指出的那样,实际上没有必要在构造函数中初始化基本类型。但是,请注意,您必须对String类型执行此操作,因为它们的默认值为null
,而不是""
,这可能会在以后引起问题。
答案 1 :(得分:1)
发生异常是因为您没有在depart方法中创建对象。您可以使用:
public void depart(int departid, String departname)
{
department = new Department();
department.setDid(departid);
department.setDname(departname);
}
答案 2 :(得分:0)
在depart方法中的部门类中,您不创建部门的实例,并且部门字段为null,请改用以下方法: 部门=新部门();
public void depart(int departid, String departname){
department = new Department();
department.setDid(departid);
department.setDname(departname);
}