簡體   English   中英

如何在 Java 中訪問私有對象中的私有對象?

[英]How to access a private object within a private object in Java?

我試圖在這里訪問一個對象中的一個對象。 下面是三個類。 我對此進行了簡化,使其與完整程序中的錯誤相同。 這是主類。

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以及如何避免這種情況? 請幫我。

問題是當你創建一個Student對象時,你需要初始化每個成員對象,即department對象為null,所以當你執行department.setDid(101) ,它會返回一個異常。

要解決此問題,請為 Student 類創建一個自定義構造函數,如下所示:

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

編輯:正如塞巴斯蒂安在下面的評論中正確指出的那樣,實際上沒有必要在構造函數中初始化原始類型。 但是,請注意,您必須對 String 類型執行此操作,因為它們的默認值是null ,而不是"" ,這可能會在以后導致問題。

發生異常是因為您沒有在離開方法中創建對象。 你可以使用這個:

public void depart(int departid, String departname)
    {
        department = new Department();  
        department.setDid(departid);
        department.setDname(departname);
    }

在你的部門類中,你沒有創建部門的實例,部門字段為空,而是使用這個:department = new Department();

public void depart(int departid, String departname){
   department = new Department();
   department.setDid(departid);
   department.setDname(departname);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM