与Java Objects混淆

时间:2011-02-17 15:37:59

标签: java arrays

我是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";
        }

 }

为什么代码在原始变量的赋值中起作用,而在使用数组时则不起作用?

5 个答案:

答案 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是数组索引