Как получить доступ к частному объекту в частном объекте в Java? - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь получить доступ к объекту внутри объекта здесь. Ниже приведены три класса. Я упростил это, что он делает ту же ошибку, что и в полной программе. Это основной класс.

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 ]

1 голос
/ 15 февраля 2020

Исключение происходит, потому что вы не создали объект в методе отступления. Вы можете использовать это:

public void depart(int departid, String departname)
    {
        department = new Department();  
        department.setDid(departid);
        department.setDname(departname);
    }
1 голос
/ 15 февраля 2020

Проблема состоит в том, что при создании объекта Student необходимо инициализировать каждый объект-член, т. Е. Объект department имеет значение null, поэтому при выполнении department.setDid(101) возвращается исключение.

To исправьте это, создайте пользовательский конструктор для класса Student следующим образом:

Student()
{
    department = new Department();
    sid = 0;
    sname = "";
}

Edit: Как правильно заметил Себастьян в приведенном ниже комментарии, на самом деле довольно необязательно инициализировать примитивные типы в конструкторах. Однако обратите внимание, что вы должны сделать это для типов String, поскольку их значение по умолчанию равно null, а не "", что может вызвать проблемы в дальнейшем.

0 голосов
/ 15 февраля 2020

в вашем классе отдела в методе ухода вы не создаете экземпляр отдела, и поле отдела - пустое, используйте это вместо: отдел = новый отдел ();

public void depart(int departid, String departname){
   department = new Department();
   department.setDid(departid);
   department.setDname(departname);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...