【发布时间】:2013-01-18 13:58:10
【问题描述】:
我不熟悉使用对象数组,但无法弄清楚我做错了什么以及为什么我不断收到 Null 指针异常。我正在尝试使用一组设置为打开或关闭的聚光灯对象创建一个剧院类。但是 - 每当我调用这个数组时,我都会得到一个空指针异常。
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;
}
}
我必须在创建数组时做一些基本错误,但无法弄清楚。
【问题讨论】:
-
数组用空值初始化。您需要为数组的每个条目分配一个新的聚光灯,如下所示:array[2] = new Spotlight()。旁注:按照约定(不是语法)的类名应该以大写字母开头。
-
将你的数组包私有化是有风险的,即使数组是最终的,仍然可以更改引用。包 private 比 public 更好,但你仍然需要特别注意,当你不希望它们发生变化时,事情不会发生变化。
-
(我不得不提一下,忽略编码约定是一个非常糟糕的主意。)
标签: java arrays nullpointerexception