我做了下面的课程只是为了弄清楚我不理解的东西,它实际上并没有用于任何事情。
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。
答案 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];