33

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

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

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

为什么我会收到此异常,我该如何解决?

4

9 回答 9

44

您创建了数组,但没有在其中放入任何内容,因此您有一个包含 5 个元素的数组,所有元素均为空。你可以添加

boll[0] = new ResultList();

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

于 2009-12-17T15:50:44.817 回答
9
ResultList[] boll = new ResultList[5];

创建一个 size=5 的数组,但不创建数组元素。

您必须实例化每个元素。

for(int i=0; i< boll.length;i++)
    boll[i] = new ResultList();
于 2009-12-17T15:55:00.363 回答
3

我想通过打电话

ResultList[] boll = new ResultList[5];

您创建了一个可以容纳 5 个 ResultList 的数组,但您必须先初始化boll[0]才能设置值。

boll[0] = new ResultList();
于 2009-12-17T15:51:55.683 回答
3

正如许多人在前面的答案中所说,ResultList[] boll = new ResultList[5];只需创建一个大小为 5 的 ResultList 数组,其中所有元素都为空。当您使用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";
于 2013-01-07T18:42:46.253 回答
1
ResultList p[] = new ResultList[2];

通过编写此代码,您只需为 2 个元素的数组分配空间。您应该通过执行以下操作来初始化引用变量:

for(int i = 0; i < 2; i++){
    p[i] = new ResultList();
 }
于 2017-07-04T06:48:05.353 回答
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 次。如果没有,你就知道构造函数没有被调用。另请注意,上面的行没有带有开闭括号“()”的参数列表,因此它不是函数调用 - 或构造函数调用。相反,我们只指类型。我们说:“我需要一个 ResultList 对象数组的空间,总共最多 5 个。” 在此行之后,您所拥有的只是空白空间,而不是对象。

当您尝试各种修复时,调试行将帮助确认您得到了您想要的。

于 2015-12-04T18:55:12.040 回答
0

首先,您创建了 5 个 ResultList 类型的元素,但是在插入值时,您插入的名称和值是错误的。您可以使用构造函数来创建值并将值插入到数组元素中。

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");
    }
于 2017-07-14T14:05:23.030 回答
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 引用,这就是您获得 null 的原因。因此,只需在该索引上分配对象,然后设置值。

于 2017-10-28T21:04:30.943 回答
-1

您可以尝试这种情况,也可以在 ResultList 类中将变量“名称”设为静态。所以当 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() {}
}
于 2017-11-22T07:21:54.893 回答