线程“main”java中的异常

时间:2013-04-27 15:23:54

标签: java nullpointerexception

为什么我会收到错误?我使用eclipse,错误

  

线程“main”java.lang.NullPointerException中的异常             在Shopping_Booket.Movie_assign(Shopping_Booket.java:8)                 在AcmeVideo.main(AcmeVideo.java:8)

代码:

public class AcmeVideo {

    public static void main(String[] args) {
        Shopping_Booket shop = new Shopping_Booket();
        shop.Movie_assign();
    }
}

public class Shopping_Booket {

    movie[] MovieArray = new movie[5];

    public void Movie_assign() {

        MovieArray[0].Assign("Batman Dark Knight Return", 8, 2012, 22);
        MovieArray[1].Assign("Fringe", 9.2, 2008, 40);
        MovieArray[2].Assign("V for Vandetta", 8, 2005, 28);
        MovieArray[3].Assign("X man First Class", 7, 2005, 30);
        MovieArray[4].Assign("Hulk", 8.5, 2000, 16);
        System.out.println(MovieArray[2].Title);
    }
}

public class movie {

    public String Title;
    public double Rating;
    public int Year;
    public double Price;

    public void Assign(String title, double rating, int year, double price) {
        this.Title = title;
        this.Rating = rating;
        this.Year = year;
        this.Price = price;
    }

    public void Displayİnfo() {
        System.out.println("Title = " + Title);
        System.out.println("Year = " + Year);
        System.out.println("Rating = " + Rating);
        System.out.println("Price = " + Price);
        System.out.println("-------------------------------------");
    }
}

2 个答案:

答案 0 :(得分:4)

您已创建了一个数组,但您从未创建过实例。您的数组只是一个空对象数组。

movie [] MovieArray=new movie [5];

目前movie看起来像这样:

{null, null, null, null, null}

您需要做的是添加一些实例。

MovieArray[0] = new Movie(// etc);

请注意

Java命名约定规定非常量变量必须以小写字母开头,所有后续单词以大写字母开头。

MovieArray -> movieArray

答案 1 :(得分:3)

此声明:

movie [] MovieArray=new movie [5];

...创建一个包含5个元素的新数组,但每个元素都以null开头。您永远不会实际创建movie()类的新实例。相反,您每次都在空引用上调用Assign方法 - 这就是造成异常的原因。

有关数组的更多信息,请参阅Java教程的Arrays部分。

您应该将Assign方法更改为构造函数,然后编写:

MovieArray[0] = new movie("Batman Dark Knight Return", 8, 2012, 22);

然后你应该肯定Java naming conventions上阅读:

  • 您的课程应该是Movie,而不是movie
  • 您的变量应以小写字母开头(title,而不是Title
  • 同样的方法:displayInfo

我还强烈建议您使用私有字段而不是公用字段。