对象数组的空指针exception

我是新手使用对象数组,但无法弄清楚我做错了什么以及为什么我一直得到一个Null指针exception。 我正在尝试创建一个剧院类,其中包含一组聚光灯对象,这些对象可以设置为打开或关闭。 但是 – 每当我调用这个数组时,我都会得到一个空指针exception。

package theatreLights; public class TheatreSpotlightApp { public static void main(String[] args) { Theatre theTheatre = new Theatre(8); System.out.println("element 5 " + theTheatre.arrayOfSpotlights[5].toString()); } } package theatreLights; public class Theatre { spotlight[] arrayOfSpotlights; public Theatre(int N){ arrayOfSpotlights = new spotlight[N]; for (int i = 0; i < arrayOfSpotlights.length; i++) { arrayOfSpotlights[i].turnOn(); } } } package theatreLights; public class spotlight { int state; public spotlight(){ state = 0; } public void turnOn(){ state = 1; } void turnOff(){ state = 0; } public String toString(){ String stringState = ""; if(state == 0){ stringState = "is off"; } else if(state==1){ stringState = "is on"; } return stringState; } } 

我必须在创建数组时做一些基本的错误,但无法弄明白。

更换

 arrayOfSpotlights[i].turnOn(); 

 arrayOfSpotLights[i] = new Spotlight(); arrayOfSpotlights[i].turnOn(); 

这条线

 arrayOfSpotlights = new spotlight[N]; 

将创建一系列聚光灯。 但是它不会用聚光灯填充这个数组。

当你做“arrayOfSpotlights = new spotlight [N];” 你初始化一个长度为N的数组,你需要做的是初始化其中的每个对象:

 for i=0; i 

希望我是对的:)

您没有创建聚光灯对象。

 arrayOfSpotlights = new spotlight[N]; 

这只会创建一个对聚光灯的引用数组,而不是引用的对象。

简单的解决方案是

 for (int i = 0; i < arrayOfSpotlights.length; i++) { arrayOfSpotlights[i] = new spotlight(); arrayOfSpotlights[i].turnOn(); } 

顺便说一句你应该使用TitleCase作为类名。

你可以像这样编写你的类,而不使用像0和1这样的神秘代码

 public class Spotlight { private String state; public Spotlight() { turnOff(); } public void turnOn() { state = "on"; } void turnOff() { state = "off"; } public String toString() { return "is " + state; } } 

你声明了数组arrayOfSpotlights ,但没有初始化数组的成员(所以它们是null – 你得到了exception)。

将其更改为:

 public class Theatre { spotlight[] arrayOfSpotlights; public Theatre(int N){ arrayOfSpotlights = new spotlight[N]; for (int i = 0; i < arrayOfSpotlights.length; i++) { arrayOfSpotlights[i]=new spotlight(); arrayOfSpotlights[i].turnOn(); } } } 

它应该工作。