Java 打印对象数组会导致空指针异常 公共课堂学生日程安排{ 私立学生[]学生=新生[10]; 私人学生; 公共字符串addStudent(int rollNumber,字符串名称) { 学生[counterStudent++]=新学生(编号、姓名); 返回“学生添加成功”; } 公众假期所有学生() { 对于(int i=0;i

Java 打印对象数组会导致空指针异常 公共课堂学生日程安排{ 私立学生[]学生=新生[10]; 私人学生; 公共字符串addStudent(int rollNumber,字符串名称) { 学生[counterStudent++]=新学生(编号、姓名); 返回“学生添加成功”; } 公众假期所有学生() { 对于(int i=0;i,java,arrays,object,exception,printing,Java,Arrays,Object,Exception,Printing,您获得NullPointerException的原因是因为private Student[]students=new Student[10]。这意味着您有一个固定大小为10的Student数组。Java中的默认Object值为null。如果不向数组添加任何内容,则表示Student中有10个null对象 如果students数组中的某个偏移量尚未填充,您将命中一个null值并得到一个异常,因为您试图调用null上的一个方法 您可以在循环中验证它: public class StudentSche

您获得
NullPointerException
的原因是因为
private Student[]students=new Student[10]
。这意味着您有一个固定大小为10的
Student
数组。Java中的默认
Object
值为
null
。如果不向数组添加任何内容,则表示Student中有10个
null
对象

如果students数组中的某个偏移量尚未填充,您将命中一个null值并得到一个异常,因为您试图调用
null
上的一个方法

您可以在循环中验证它:

public class StudentSchedular {

    private Student[] students=new Student[10];
    private int counterStudent;

    public String addStudent(int rollNumber,String name)
    {
        students[counterStudent++]=new Student(rollNumber,name);

        return "Student added successfully";
    }

    public void showAllStudents()
    {
        for(int i=0;i<students.length;i++){
            System.out.println(students[i].getRollNumber());
            System.out.println(students[i].getName());
        }
    }
}

for(int i=0;i您的数组有10个插槽。如果给定3个值,则有7个插槽为null。您需要更改正在使用的数据结构类型,或者在打印时检查null。下面的代码将执行null检查,然后打印数组中包含null值的索引

        for(int i=0;i<students.length;i++){
            if(students[i] instanceof User) {
                System.out.println(students[i].getRollNumber());
                System.out.println(students[i].getName());
            }
        }
public void showallstustudents()
{

对于(inti=0;i我更喜欢新的for循环(从Java5开始)

新的for循环适用于。您将只获得非null对象

要回答您的问题,最佳做法是:

在学生对象中重写toString()

for(Student student : this.students) {

}
在你的循环中,只要做

@Override
public void String toString(){
    StringBuilder stringBuilder = new StringBuilder();

    stringBuilder.append(this.rollNumber);
    stringBuilder.append(this.name);

    return stringBuilder.toString();
}

println根据需要处理空值,代码将变干净。

您没有在任何地方使用addStudent()方法,而您正在初始化数组。我建议您使用Student的
ArrayList
。它很容易处理,这也解决了问题。
@Override
public void String toString(){
    StringBuilder stringBuilder = new StringBuilder();

    stringBuilder.append(this.rollNumber);
    stringBuilder.append(this.name);

    return stringBuilder.toString();
}
System.out.println(stundents[i]);