为什么我会收到错误?我使用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("-------------------------------------");
}
}
答案 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
等我还强烈建议您使用私有字段而不是公用字段。