NullPointerException:我如何分配它,所以它不是null?

时间:2013-09-10 20:42:19

标签: java nullpointerexception playlist

好的,所以我正在尝试创建一个播放列表类,在构造函数中创建一个包含50个SongRecords的数组。我首先使用未经编辑的代码获得了NPE,因此我尝试更改它并明确写入构造函数,为播放列表中的每个元素分配一个无信息的SongRecord()。但是,NPE出现在我引用要分配歌曲记录的特定歌曲元素的行上。如果我不能为元素分配歌曲记录,我该如何解决?

以下是我的代码的一部分,我认为是错误的相关信息。 NPE指向“this.amount [i] ...”

这一行
public class Playlist {
   private int currentSongs;
   private SongRecord[] amount;
   public static final int MAX=50;


/*Constructor that defaults current number of songs to 0 and max space to be 50 songs*/

public Playlist(){
    this.currentSongs=0;
    SongRecord[] list=new SongRecord[MAX];
    for (int i=0; i<MAX;i++){
        this.amount[i]=new SongRecord();
    }
}

2 个答案:

答案 0 :(得分:4)

您已创建不同的数组(包含变量list) - 但随后尝试填充amount

SongRecord[] list=new SongRecord[MAX];
for (int i=0; i<MAX;i++){
    this.amount[i]=new SongRecord();
}

amount仍为null(所有引用类型变量的默认值),因此您将获得异常。

我怀疑你想要:

amount = new SongRecord[MAX];
for (int i = 0; i < MAX;i++) {
    amount[i] = new SongRecord();
}

或者更好的是,将amount更改为List<SongRecord>类型的变量,然后将其初始化为:

amount = new ArrayList<SongRecord>(); // Or new ArrayList<> if you're using Java 7

通常,集合类比数组更容易使用。

答案 1 :(得分:1)

您尚未初始化amount

amount = new SongRecord[MAX];

在构造函数中,由于某种原因,您初始化另一个SongRecord数组。相反,初始化你的

public Playlist(){
    this.currentSongs=0;
    this.amount = new SongRecord[MAX];
    for (int i=0; i<MAX;i++){
        this.amount[i]=new SongRecord();
    }
}

如果您没有初始化数组,默认情况下它将引用null。您无法访问null引用的元素。