与Java对象混淆
我是Java初学者,正在尝试以下代码:与Java对象混淆,java,arrays,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.
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";
}
}
为什么在使用数组时,代码在赋值基元变量时起作用,而在赋值基元变量时不起作用?因为
arr
中只有一个对象引用数组,但它们没有初始化为指向任何实际对象
您还需要执行以下操作:
arr[0] = new Movie();
arr[1] = new Movie();
因为
arr
中只有一个对象引用数组,但它们没有初始化为指向任何实际对象
您还需要执行以下操作:
arr[0] = new Movie();
arr[1] = new Movie();
您的电影阵列中还没有任何内容。您需要先将对象放入数组中,然后才能对其进行操作
在“Movie[]arr=new Movie[2];”和“arr[0].playIt();”之间,您需要将电影对象分配给数组,以便执行.playIt()函数并实际执行任何操作。您的电影数组中还没有任何内容。您需要先将对象放入数组中,然后才能对其进行操作
在“Movie[]arr=new Movie[2];”和“arr[0].playIt();”之间,您需要将电影对象分配给数组,以便执行.playIt()函数并实际执行任何操作。NPE位于前一行的
arr[0].playIt()代码>
不过,这与对象无关,这是因为数组是空的。NPE
位于前一行,位于arr[0]。playIt()代码>
Movie [] arr = new Movie[2]; // creates an empty array of two elements [null, null]
// now lets add Movie objects
arr[0] = new Movie();
...
但这与对象无关,这是因为数组是空的
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());
...
List movies=new ArrayList();
添加(新电影());
...
我建议使用ArrayList而不是array:
List<Movie> movies = new ArrayList<Movie>();
movies.add(new Movie());
...
List movies=new ArrayList();
添加(新电影());
...
您需要填充阵列。到目前为止,您所做的只是为电影对象数组分配空间。你没有把任何东西放进那个空间。你可以用
arr[i]=新电影();其中i是数组索引您需要填充数组。到目前为止,您所做的只是为电影对象数组分配空间。你没有把任何东西放进那个空间。你可以用
arr[i]=新电影();其中i是数组索引