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]);