Java 在 class space 中实例化 Class 的数组会产生 NullPointerException

Java Instantiating Array of Class in class space yields NullPointerException

我是 Java 的新手(来自 C# 和其他语言),如果我创建一个变量并在 class 的空 space 中实例化它,就像这样;

private SomeClass[][] someClassArray = new SomeClass[5][5];

然后我收到 NullPointerException。但是,如果我不在那里实例化而是在一种方法中实例化它就可以正常工作。好像其他时候我可以逃脱这个。

我试着在文档中查找,但没有成功。有人可以提供一些反馈或链接来解释这一点,以便我了解如何在 Java 中正确实例化吗?

编辑:

在这种情况下,在 if 语句中使用 someClassArray.length 时出错。为什么在方法中实例化时可以正常工作,但在 class.

中却不能?

下面是我在赋值时得到 NullPointerException 的另一个例子...

public class LevelClass extends SomeOtherClass{

    private Map<String, LevelItemKeyClass> levelItemKeys = new HashMap<String, LevelItemKeyClass>();

    private void CreateKeys() {
        levelItemKeys.put(new LevelItemKeyClass("abc")); //NullPointerException occurs here
    }
}

以与上述情况相同的方式,它在方法中实例化时工作正常,但在 class 中不工作。以下按预期工作;

public class LevelClass extends SomeOtherClass{

    private Map<String, LevelItemKeyClass> levelItemKeys;

    private void CreateKeys() {
        levelItemKeys = new HashMap<String, LevelItemKeyClass>();

        levelItemKeys.put(new LevelItemKeyClass("abc"));
    }
}

您正在实例化一个 SomeClass 的二维数组,容量为 5 * 5

这永远不会抛出 NullPointerException 除非 SomeClass 中的某个静态初始化器抛出它(无论如何它实际上会抛出 ExceptionInInitializerError) . 很可能,你然后试图访问任何数组元素,默认初始化为 null(未初始化的 Object 都有 null 默认值),然后调用实例方法,这会抛出 NullPointerException

简而言之,在调用 someClassArray[x][y] 上的任何方法之前,您需要初始化该元素,例如:

someClassArray[x][y] = new SomeClass();

编辑

由于你的问题已经改变了很多... 如果您遇到此语句中的 NullPointerException

levelItemKeys.put(new LevelItemKeyClass('abc')); // NullPointerException occurs here

... 而您的 levelItemKeys 地图在修改前已初始化,这意味着 NPE 已被抛出到您的构造函数中。您还没有发布代码。

我建议使用调试器。

在我看来,问题在于 JAVA 和 C# 之间的构造函数与实例变量的初始化顺序不同。