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

为何无法使用TopTen类中定义的Song对象数组?

问题原因分析与修复方案

嘿,我一眼就揪出你代码里的问题啦!你触发的应该是NullPointerException(空指针异常),根源出在构造函数的变量作用域上:

  • 你的TopTen类里定义了一个成员变量private Song[] arr;,这个变量属于整个类,但默认初始值是null。
  • 但在构造函数中,你写的是Song[] arr = new Song[10];——这里的arr是构造函数内部的局部变量,和类的成员变量重名了!相当于你在构造函数里新建了一个只在这个方法里有效的数组,而类的成员变量arr依然是null。
  • 当你调用findLength()方法里的arr.length时,实际上是在访问那个未初始化的null成员变量,自然就抛出异常了。

修复方法

只需要修改构造函数的代码,去掉局部变量的声明,直接给类的成员变量赋值即可:

方案一:直接赋值

public class TopTen {
    private Song[] arr;

    public TopTen() {
        // 去掉前面的Song[],直接给类的成员变量arr赋值
        arr = new Song[10];
    }

    public int findLength() {
        int length = arr.length;
        return length;
    }
}

方案二:使用this关键字明确指定成员变量(可读性更好)

如果担心变量名混淆,可以用this.arr明确表示要操作的是类的成员变量:

public class TopTen {
    private Song[] arr;

    public TopTen() {
        // 用this.arr明确指向类的成员变量
        this.arr = new Song[10];
    }

    public int findLength() {
        int length = arr.length;
        return length;
    }
}

这样修改后,类的成员变量arr就会被正确初始化为长度为10的Song数组,调用findLength()方法时就能正常获取数组长度啦。

内容的提问来源于stack exchange,提问作者arh012

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:47:56