我一直在尝试创建一个包含两个值的类数组,但是当我尝试将值应用于数组时,我得到一个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";
}
}
为什么我会收到此错误以及如何解决?
答案 0 :(得分:38)
您创建了数组,但没有在其中放置任何内容,因此您有一个包含5个元素的数组,所有元素都为null。你可以添加
boll[0] = new ResultList();
在您设置boll [0] .name。
的行之前答案 1 :(得分:5)
ResultList[] boll = new ResultList[5];
创建一个size = 5的数组,但不创建数组元素。
您必须实例化每个元素。
for(int i=0; i< boll.length;i++)
boll[i] = new ResultList();
答案 2 :(得分:2)
我想通过致电
ResultList[] boll = new ResultList[5];
你创建了一个可以容纳5个ResultList的列表,我认为你必须在设置值之前初始化boll [0]。
boll[0] = new ResultList();
答案 3 :(得分:2)
正如许多人在之前的回答中所说,ResultList[] boll = new ResultList[5];
只是创建一个ResultList数组,其大小为5,其中所有元素都为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";
答案 4 :(得分:0)
此外,您可以通过向您的班级添加调试行来证明这一点,例如:
public class ResultList {
public String name;
public Object value;
public ResultList() {
System.out.println("Creating Class ResultList");
}
}
每当创建一个对象时,必须调用其中一个构造函数(如果没有构造函数,则会自动创建一个默认构造函数,类似于您类中已有的构造函数)。如果您只有一个构造函数,那么创建对象的唯一方法是调用该构造函数。如果该行
ResultList[] boll = new ResultList[5];
确实创建了5个新对象,您会看到您的调试行在控制台上出现5次。如果没有,您知道没有调用构造函数。另请注意,上面的行没有带有开括号和闭括号的参数列表&#34;()&#34;所以它不是函数调用 - 或构造函数调用。相反,我们只是指类型。我们说:&#34;我需要一个ResultList对象数组的空间,总共最多5个。&#34;在这一行之后,你所拥有的只是空白空间而不是对象。
当您尝试各种修复时,调试行将有助于确认您获得了所需的内容。
答案 5 :(得分:0)
ResultList p[] = new ResultList[2];
通过编写这个,您只需为2个元素的数组分配空间。 您应该通过执行以下操作初始化引用变量:
for(int i = 0; i < 2; i++){
p[i] = new ResultList();
}
答案 6 :(得分:0)
首先,您创建了ResultList类型的5个元素,但是在插入值时,您插入的名称和值错误。您可以使用构造函数为数组元素创建和插入值。
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");
}
答案 7 :(得分:0)
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);
}
}
直到你创建了ResultSet对象,但是每个索引都是空的,指向空引用,这是你获得null的原因。 所以只需在该索引上分配Object,然后设置值。
答案 8 :(得分:-1)
您可以尝试这种情况,也可以制作变量&#34; name&#34; ResultList类中的static。所以当ResultList [] boll = new ResultList [5]时;在那个时候执行,该类中的所有变量都将被赋值
public static void main(String[] args){
ResultList[] boll = new ResultList[5];
boll[0] = new ResultList();
boll[0].name = "iiii";
System.out.println(boll[0].name);
}
public class ResultList {
public static String name;
public Object value;
public ResultList() {}
}