创build对象数组时的NullPointerException

我一直在尝试创build一个包含两个值的类的数组,但是当我尝试将值应用于数组时,我得到一个NullPointerException。

public class ResultList { public String name; public Object value; public ResultList() {} } 

 public class Test { public static void main(String[] args){ ResultList[] boll = new ResultList[5]; boll[0].name = "iiii"; } } 

为什么我得到这个错误,我该如何解决?

你创build了这个数组,但是没有放入任何东西,所以你有一个包含5个元素的数组,它们都是null。 你可以添加

 boll[0] = new ResultList(); 

在你设置boll [0] .name的行之前。

 ResultList[] boll = new ResultList[5]; 

创buildsize = 5的数组,但不创build数组元素。

你必须实例化每个元素。

 for(int i=0; i< boll.length;i++) boll[i] = new ResultList(); 

正如前面的答案中所说的那样, ResultList[] boll = new ResultList[5]; 只需创build一个大小为5的ResultList数组,其中所有元素均为null。 当您使用boll[0].name ,您正在尝试执行类似于null.name ,这是NullPointerException的原因。 使用下面的代码:

 public class Test { public static void main(String[] args){ ResultList[] boll = new ResultList[5]; for (int i = 0; i < boll.length; i++) { boll[i] = new ResultList(); } boll[0].name = "iiii"; } } 

这里的for循环基本上用ResultList对象初始化数组中的每个元素,一旦for循环完成,你可以使用

 boll[0].name = "iiii"; 

我想通过调用

  ResultList[] boll = new ResultList[5]; 

你创build了一个可以容纳5个ResultList的列表,我想你必须在设置value之前初始化boll [0]。

 boll[0] = new ResultList(); 

此外,您可以通过向您的课程添加debugging行来certificate这一点,例如:

 public class ResultList { public String name; public Object value; public ResultList() { System.out.println("Creating Class ResultList"); } } 

无论什么时候创build一个对象,都必须调用它的一个构造函数(如果没有构造函数,将会自动创build一个默认的构造函数,类似于你的类中已经有的构造函数)。 如果你只有一个构造函数,那么创build对象的唯一方法是调用该构造函数。 如果行

 ResultList[] boll = new ResultList[5]; 

真正创build了5个新的对象,你会看到你的debugging线出现在控制台上5次。 如果没有,你知道构造函数没有被调用。 还要注意,上面的行没有带有开放和closures圆括号“()”的参数列表,所以它不是函数调用或构造函数调用。 相反,我们只是指这个types。 我们说:“我需要一个ResultList对象数组的空间,最多5个。” 在这一行之后,你所拥有的只是空的空间,而不是物体。

当你尝试各种修复程序,debugging线将有助于确认你得到你想要的。

首先你创build了ResultListtypes的5个元素,但是在插入值时你插入的名字和值是错误的。 你可以使用构造函数来创build数组元素并插入值。

 class ResultList { public String name; public Object value; public ResultList(String name,Object value){ this.name = name; this.value = value; System.out.println(name+" --- "+value); } } public static void main(String[] args) { ResultList[] boll = new ResultList[5]; boll[0] = new ResultList("myName","myValue"); } 
 ResultList p[] = new ResultList[2]; 

通过编写这个你只需要为2个元素的数组分配空间。 你应该这样做初始化引用variables:

 for(int i = 0; i < 2; i++){ p[i] = new ResultList(); } 
 class ResultList { public String name; public Object value; public ResultList() {} } public class Test { public static void main(String[] args){ ResultList[] boll = new ResultList[5]; boll[0] = new ResultList(); //assign the ResultList objet to that index boll[0].name = "iiii"; System.out.println(boll[0].name); } } 

直到你创build了ResultSet对象,但是每个索引都是空的,指向空引用,这就是你得到null的原因。 所以只需在该索引上分配对象,然后设置该值。