获得NullPointerException异常,为什么
问题描述:
声明:获得NullPointerException异常,为什么
private Man[] man;
这是初始化:
Man[] man = new Man[1];
for (int i = 0; i < 1; i++){
man[i] = new Man();
for (int j = 0; j < 3; j++){
man[i].eatThis(table.foods[table.topFood-1]);
table.topFood--;
}
}
需要打印:
System.out.println(getMan(0));
都到:
public Man getMan(int k){
return man[k];
}
但我收到NullPointerException。为什么? While:
System.out.println(man[0]);
工作得很好。
它返回:
Man = (bread, meat, cheese)
这里的例外:
Exception in thread "main" java.lang.NullPointerException
at ManRunning.getMan(ManRunning.java:80)
at ManRunning.newGame(ManRunning.java:133)
at ManRunning.<init>(ManRunning.java:57)
at RunDevilRun.main(RunDevilRun.java:9)
答
这听起来像你实际上是阴影类成员man
与局部变量man
。在你的初始化
Man[] man = new Man[1];
声明一个新的变量。局部变量与类成员同名是允许的,它们将隐藏(又名阴影)类级变量。所以,虽然看起来您正在初始化man
,但您实际上正在初始化本地数组,而不是触及班级中的某个数组。只是初始化它,而不是声明一个新的,你只想说:
man = new Man[1];
+0
它的工作!非常感谢你! – 2013-03-03 03:51:53
+0
......当然,阴影并不像事后证明那样明显。 +1 – 2013-03-03 03:54:23
当你在同一个地方切换它们时,会发生这种情况吗? – FatalError 2013-03-03 03:40:07
在这个函数中数组man []仍然在范围内吗? – Ken 2013-03-03 03:42:33
任何影子都有可能发生? – 2013-03-03 03:50:16