如何在Java的私有对象中访问私有对象?

时间:2020-02-15 12:08:30

标签: java class object

我试图在此处访问对象中的对象。以下是三个类。我简化了它,使其产生与整个程序相同的错误。 这是主要课程。

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?如何避免这种情况?请帮助我。

3 个答案:

答案 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);
}