2013-04-27 70 views
-5

为什么我会收到错误?我用蚀,误差线程“main”中的异常java

异常在线程 “主” 显示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

我可以看到错别字...... – sschrass 2013-04-27 15:26:23

+0

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/array.html – 2013-04-27 15:26:25

+0

请不要使用类名称,如'Shopping_Booket','movie'。方法名称,如“Movie_assign()”。他们不确认Java命名约定。 – Lion 2013-04-27 15:36:11

回答

4

您已经创建了一个数组,但你从来没有创建的实例。你的数组只是一个空对象数组。

movie [] MovieArray=new movie [5]; 

目前movie看起来是这样的:

{null, null, null, null, null} 

而你需要做的是添加一些实例给它。

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

只是要注意

Java命名约定状态变量不是常量必须以小写字母开头,以及所有后续字开始一个大写字母。

MovieArray -> movieArray 
3

此声明:

movie [] MovieArray=new movie [5]; 

...创建具有5个元素的新数组,但每个元素为空开始。您从来没有实际创建movie()类的新实例。相反,您每次都在空引用上调用您的Assign方法 - 这就是导致异常的原因。

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

你应该改变你的Assign方法引入一个构造函数,然后写:

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

你应该再绝对Java naming conventions读了起来:

  • 你的类应该是Movie,不movie
  • 您的变量应以小写字母开头(title ,不Title
  • 同上你的方法:displayInfo

我也强烈建议您使用私人领域而不是公共的。

+0

不知道为什么我的投票比你的投票多。 +1以获得彻底的答案! – christopher 2013-04-27 15:28:18

相关问题