【问题标题】:Why am I getting a NullPointer Exception with my array? [duplicate]为什么我的数组出现 NullPointer 异常? [复制]
【发布时间】:2017-02-20 18:12:31
【问题描述】:

我一生都无法弄清楚为什么我在这里遇到错误。它让我输入输入,然后退出并说在以“emp[i].setName”开头的行有一个 NullPointerException。

    String dpt, salary, name;
    Manager[] emp = new Manager[3];

    for (int i=0; i<3; i++)
    {
        name = JOptionPane.showInputDialog("Enter Name");
        emp[i].setName(name);

【问题讨论】:

  • 因为您创建了一个管理器数组,但您从未将数组的每个元素设置为 new Manager()
  • 数组全是空值...

标签: java arrays class nullpointerexception


【解决方案1】:

当您在 Java 中创建数组时,所有元素都是空值(无论如何,对于非原始类型;例如,整数将只是 0)。如果要创建包含实际对象的数组,则需要创建它们。一种选择(也是最简单的)是像这样在循环中创建它们:

String dpt, salary, name;
Manager[] emp = new Manager[3];

for (int i=0; i<emp.length; i++)
{
  emp[i] = new Manager(); // Create the object
  name = JOptionPane.showInputDialog("Enter Name");
  emp[i].setName(name);
}

还要注意我在for 循环中使用emp.length 而不仅仅是数字3。这样如果你的管理器数组的大小发生变化,你就不会以ArrayIndexOutOfRangeException 结束(试图访问数组中不存在的元素)。

This question 有更详细的答案,绝对值得一读。

【讨论】:

  • When you create an array in Java, all of the elements are nulls 仅适用于非原始类型。
  • 其实我标记为重复的问题比“什么是空指针”更详细
  • @Zarwan,已编辑。关于字符串的那部分是正确的,是吗?
  • 字符串不是原始类型。
  • 嘎。弗里金Java。你是对的。
猜你喜欢
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 2019-09-12
相关资源
最近更新 更多