从实例化的Java数组中读取抛出NullPointerException而不是返回0

时间:2014-01-20 16:17:36

标签: java arrays nullpointerexception

我做了下面的课程只是为了弄清楚我不理解的东西,它实际上并没有用于任何事情。

public class A
{
    private int[] items;

    public A()
    {
        int[] items = new int[7];
    }

    public int first()
    {
        return items[0];
    }
}

因此,当我们创建一个新的A实例时,数组" items"将成为一个容量为7的阵列。

当调用first()方法时,它会在数组的第一个位置请求int变量的值。由于我们没有将此int赋予实际值,因此根据http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html,将存储的默认值为" 0"。

然而,当我实际调用该方法时,我收到nullpointerexception而不是返回0。这是为什么?

[编辑] 由于某种原因,无法回复我自己问题的评论...... 但谢谢你的帮助! 如果其他人遇到类似的问题,并且仍然不太清楚出了什么问题:

我已宣布但未初始化变量" items"它可以包含一个整数数组 现在,在构造函数中,我没有初始化我的原始变量,而是刚刚声明了一个新变量" items" (它只存在于构造函数中然后消失)然后将其初始化为7个整数的数组 现在打电话给"第一个"它试图找到原始"项目"的第一个位置上的内容。数组,因为这是唯一的"项目"当前存在的数组。但是我还没有初始化那个数组,这意味着没有数组,只有一个变量。因此返回nullpointerexception。

2 个答案:

答案 0 :(得分:4)

public A()
{
    int[] items = new int[7];
}

应该是

public A()
{
    this.items = new int[7];
}

否则您将声明并初始化与您的实例字段同名的其他变量。

答案 1 :(得分:1)

更改

int[] items = new int[7];

作为

this.items = new int[7];