-2

宣布:

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。为什么?尽管:

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)
4

1 回答 1

3

听起来您实际上是在使用局部变量来隐藏类成员。在你的初始化manman

Man[] man = new Man[1];

这声明了一个新变量。允许与类成员同名的局部变量,它们将隐藏(也称为阴影)类级别变量。因此,虽然看起来您正在初始化man,但实际上您正在初始化一个本地数组,而不是触及您班级中的那个。要初始化它而不声明一个新的,你只想说:

man = new Man[1];
于 2013-03-03T03:48:38.503 回答