“线程中的异常”主“java.lang.NullPointerException”

时间:2011-05-11 00:44:48

标签: java exception pointers null

我正在尝试运行一个程序,如果一切顺利的话,能够花一年时间并返回当年发布的专辑的标题。我已经给了它6张专辑,我现在正在尝试打印一个标题。我已经解决了一些非常令人沮丧的错误,但这是我以前从未见过的错误。错误出现在第21行,但我不确定这意味着什么。有人可以帮忙吗?

package songselector;

import java.util.Scanner;

public class Main {
    public class Album
    {
int year; String title;
public Album () {
this.year = 0; this.title = null;
        }
public Album (int year, String title) {
this.year = year; this.title = title;
     }
    }

   class CAKE {
Album[] albums;
public CAKE () {
albums = new Album[6];
albums[0].year = 1994; albums[0].title = "Motorcade Of Generosity";
albums[1].year = 1996; albums[1].title = "Fashion Nugget";
albums[2].year = 1998; albums[2].title = "Prolonging The Magic";
albums[3].year = 2001; albums[3].title = "Comfort Eagle";
albums[4].year = 2004; albums[4].title = "Pressure Chief";
albums[5].year = 2011; albums[5].title = "Showroom of Compassion";
     }

public void printAlbum (int y) {
System.out.println (albums[y].title);
    }

    }

    public static void main(String[] args) {
        new Main().new CAKE().printAlbum (0);
    }
}

2 个答案:

答案 0 :(得分:3)

这意味着您正在尝试访问/调用null对象上的方法。在您的情况下,您初始化了相册数组,但没有初始化数组中的每个相册。

您需要初始化阵列中的每个专辑:

albums = new Album[6];
albums[0] = new Album();
albums[0].year = 1994; 
albums[0].title = "Motorcade Of Generosity";
...

甚至更简单(正如@entonio指出的那样):

albums = new Album[6];
albums[0] = new Album(1994, "Motorcade Of Generosity");
albums[1] = new Album(1996, "Fashion Nugget");
...

因为你有一个合适的构造函数。

还有一件事:不要在每一行中调用多个方法,它将帮助您调试。

答案 1 :(得分:1)

分配对象数组时,它会填充空值。您需要创建对象来填充它们。您的albums[0]未创建,因此尝试访问其year字段(即使是写入)会导致NPE。