【问题标题】:Java Instantiating Array of Class in class space yields NullPointerExceptionJava 在类空间中实例化类数组会产生 NullPointerException
【发布时间】:2016-02-24 23:32:32
【问题描述】:

我是 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"));
    }
}

【问题讨论】:

  • private SomeClass[][] someClassArray = new SomeClass[5][5](); ?
  • 以这种方式初始化它应该可以正常工作。您需要向任何人展示更多代码以帮助找到问题。
  • 什么是“类的空白”?

标签: java variables nullpointerexception instantiation


【解决方案1】:

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

这永远不会抛出 NullPointerException 除非 SomeClass 中的某些静态初始化程序抛出它(实际上无论如何都会抛出 ExceptionInInitializerError)。 很可能,您随后尝试访问默认初始化为 null 的任何数组元素(未初始化的 Objects 都具有 null 默认值),然后调用实例方法,该方法将抛出 @987654329 @。

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

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

编辑

由于您的问题发生了很大变化... 如果您在此声明中遇到NullPointerException

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

... 并且您的 levelItemKeys 映射在修改之前已初始化,这意味着 NPE 已在您的构造函数中被抛出。您尚未发布代码。

我建议使用调试器。

【讨论】:

  • 谢谢@Mena,但我不确定这里的情况。请查看我的编辑。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    相关资源
    最近更新 更多