我是Java的初学者,我正在尝试以下代码:
public class MovieTestDrive {
public static void main(String[] args) {
Movie one = new Movie();
one.title = "Gone with the Stock";
one.playIt();
System.out.println(one.title); // Works!! one.title is equal to Dora
Movie [] arr = new Movie[2];
arr[0].playIt();
System.out.println(arr[0].title); //Error: Null Pointer Exception
}
}
class Movie {
String title;
void playIt() {
title = "Dora";
}
}
为什么代码在原始变量的赋值中起作用,而在使用数组时则不起作用?
答案 0 :(得分:10)
因为arr
中的所有内容都是一个对象引用数组,但它们并未初始化为指向任何实际对象。
您还需要:
arr[0] = new Movie();
arr[1] = new Movie();
答案 1 :(得分:1)
您的电影阵列中还没有任何内容。您需要先将对象放入数组中,然后才能对其进行操作。
在“电影[] arr =新电影[2]之间;”和“arr [0] .playIt();”,你需要将Movie对象分配给你的数组,以便执行.playIt()函数并实际发生任何事情。
答案 2 :(得分:1)
NPE
位于上一行arr[0].playIt();
这与你的对象没有任何关系,这是你的数组是空的事实。
答案 3 :(得分:1)
Movie [] arr = new Movie[2]; // creates an empty array of two elements [null, null]
// now lets add Movie objects
arr[0] = new Movie();
...
我建议使用ArrayList而不是array:
List<Movie> movies = new ArrayList<Movie>();
movies.add(new Movie());
...
答案 4 :(得分:1)
您需要填充阵列。到目前为止你所做的就是为一系列电影对象分配空间。您没有将任何对象放入该空间。您可以使用 arr [i] = new Movie();其中i是数组索引