我如何使用另一个类类型的数组?

时间:2016-02-23 18:48:49

标签: java arrays class null

我已经宣布了一个名为Member的类。然后我分配了一个成员类型的数组。当我尝试将东西放入数组时,它给了我这个错误:

Exception in thread "main" java.lang.NullPointerException
    at HW2_2.main(HW2_2.java:15)

这是我的代码:

import c.Member;

import java.util.Scanner;
public class HW2_2 
{
     public static void main(String []args)
     {
         Member[] p = new Member[100];
         Scanner in = new Scanner(System.in);
         p[0].setID("apple12");
         p[0].setPassword("1234");
         p[0].setFirstname("fname");
         p[0].setLastname("lname");
         p[0].setEmail("*@gmail.com");
     }
 }

如何解决此问题,以便将数据存储到数组中?

2 个答案:

答案 0 :(得分:2)

您已创建一个对象p,该对象指向Member个对象的数组。太棒了。但是,数组中的每个对象默认为null。你不能简单地对它们进行操作。

您可能想要做类似......

的事情
//...
p[0] = new Member(...);
p[0].setId("ID");
//... And so on

从这里学到的重要一点是,数组声明语法不会初始化数组本身的值。那是不可能的,对吧?你如何将参数分别传递给每个构造函数?你必须手动完成。

答案 1 :(得分:0)

当你:

Member[] p = new Member[100];

它将所有数组成员初始化为null(因为这是一个对象类型数组)。

如果您希望成员可以使用,则需要初始化成员,因此您必须:

p[0] = new Member();

然后才能使用该成员。

如果要一次初始化所有成员,则需要遍历数组中的所有元素并为每个成员创建一个元素;使用Java 8,可以这样做:

IntStream.range(0, p.length).forEach(index -> p[index] = new Member());

奇怪的是,<T> void fill(T[] array, Supplier<T> supplier)类中没有Arrays这样的方法。