Java报错:无法读取数组长度,因this.grades为null的问题求助
问题解决:无法读取数组长度,因为‘this.grades’为null
核心原因
CourseGrades类中仅声明了GradedActivity[] grades数组,但未在构造函数中初始化数组实例,导致数组始终为null。当toString()方法尝试访问grades.length时,就会抛出空指针异常。
修复步骤
初始化grades数组
修改CourseGrades的构造函数,在创建对象时就为数组分配内存:public class CourseGrades{ private final int NUMBER_OF_GRADES = 4; private GradedActivity[] grades; public CourseGrades(){ // 初始化数组,指定长度为NUMBER_OF_GRADES grades = new GradedActivity[NUMBER_OF_GRADES]; } // 其余方法保持不变... }修复驱动类的空元素问题
当前驱动类仅创建了CourseGrades对象,但未调用任何setXXX方法填充数组元素,此时数组内的元素都是null,执行toString()时会再次抛出空指针异常。需要补充初始化各个成绩对象:public class CourseGradesDemo { public static void main(String[] args) { CourseGrades courseGrades = new CourseGrades(); // 实例化各成绩子类并传入CourseGrades courseGrades.setLab(new GradedActivity()); courseGrades.setPassFailExam(new PassFailExam()); courseGrades.setEssay(new Essay()); courseGrades.setFinalExam(new FinalExam()); System.out.println(courseGrades); } }注:确保
PassFailExam、Essay、FinalExam类有符合要求的无参构造函数优化toString方法(可选)
原toString()中重复拼接了两次getGrade(),可以简化为一次:@Override public String toString() { String retVal = ""; for (int index = 0; index < grades.length; index++) { // 避免重复输出 retVal += grades[index].getGrade() + "\n"; } return retVal; }
内容的提问来源于stack exchange,提问作者shabbyShoo
相关产品推荐
相关产品推荐

