You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java报错:无法读取数组长度,因this.grades为null的问题求助

问题解决:无法读取数组长度,因为‘this.grades’为null

核心原因

CourseGrades类中仅声明了GradedActivity[] grades数组,但未在构造函数中初始化数组实例,导致数组始终为null。当toString()方法尝试访问grades.length时,就会抛出空指针异常。

修复步骤

  1. 初始化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];
      }
    
      // 其余方法保持不变...
    }
    
  2. 修复驱动类的空元素问题
    当前驱动类仅创建了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类有符合要求的无参构造函数

  3. 优化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 08:22:32