Java实例化类空间中的Class数组会产生NullPointerException

时间:2016-02-12 15:25:55

标签: java variables nullpointerexception instantiation

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

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

然后我收到一个NullPointerException。但是,如果我不在那里实例化,而是在一个方法中它工作正常。似乎有时我可以逃脱这个。

我试过在文档中查找,但没有任何运气。有人可以提供一些反馈或链接来解释这个,所以我理解如何在Java中正确实例化?

修改

在这种情况下,在if语句中使用someClassArray.length时出错。为什么在方法中实例化而不是在类中实现时,它才能正常工作。

以下是另一个在分配值时得到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
    }
}

以与上述情况相同的方式,它在方法中实例化而不是类时工作正常。以下工作符合预期;

public class LevelClass extends SomeOtherClass{

    private Map<String, LevelItemKeyClass> levelItemKeys;

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

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

2 个答案:

答案 0 :(得分:3)

您正在实例化容量为SomeClass的{​​{1}}的双维数组。

这绝不会抛出5 * 5 ,除非<{strong} NullPointerException中的某个静态初始化程序抛出它(实际上它会抛出SomeClass)。  可能,您正在尝试访问任何数组元素,默认情况下初始化为ExceptionInInitializerError(非初始化null都具有Object默认值),然后调用实例方法,这将抛出null

简而言之,在NullPointerException上调用任何方法之前,您需要初始化该元素,例如:

someClassArray[x][y]

修改

因为你的问题发生了很大变化...... 如果您在此声明中遇到someClassArray[x][y] = new SomeClass();

NullPointerException

...并且您的levelItemKeys.put(new LevelItemKeyClass('abc')); // NullPointerException occurs here 映射在修改之前已初始化,这意味着NPE已在您的构造函数中抛出。您还没有发布代码。

我建议使用调试器。

答案 1 :(得分:0)

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