获得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) 
+0

当你在同一个地方切换它们时,会发生这种情况吗? – FatalError 2013-03-03 03:40:07

+0

在这个函数中数组man []仍然在范围内吗? – Ken 2013-03-03 03:42:33

+0

任何影子都有可能发生? – 2013-03-03 03:50:16

这听起来像你实际上是阴影类成员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