为什么这会在'main'java.lang.NullPointerException中给出Exception

时间:2012-01-27 16:42:44

标签: java arrays nullpointerexception

我得到NullPointerException。这就是全部,任何人都可以找出原因吗?

class one{
    String name;
}

class oneTestDrive{
    public static void main(String[] args){
        one[] obj = new one[2];

        obj[0].name = "IBM";
        obj[1].name = "AGM";

        System.out.println(obj[0].name);
        System.out.println(obj[1].name);

    }
}

5 个答案:

答案 0 :(得分:6)

one[] obj = new one[2];

这为两个one对象创造了空间,但实际上并没有创建它们!

这样做:

one[] obj = new one[2];
obj[0] = new one();
obj[1] = new one();
obj[0].name = "IBM";
obj[1].name = "AGM";

顺便说一下,根据Java语言命名约定,类one应该是大写的。

当我们接触它时,我会给你的One类一个构造函数:

class One{
    String name;

    public One(String name){
        this.name = name;
    }
}

现在你可以在一行中创建整个数组:

One[] obj = new One[]{new One("IBM"),new One("AGM")};

(接下来我将name字段设为私有,并添加getter方法等等。)

答案 1 :(得分:0)

您需要使用new来创建one个实例。现在,您的数组不包含任何实例,但您尝试在实例上设置name属性。当你这样做

obj[0].name

obj[0]为null,您无法在null上获取属性....

尝试类似......

one one1 = new one();
one1.name = "IBM"
obj[0] = one1;
顺便说一下,java中的类名应该是正确的驼峰......

答案 2 :(得分:0)

在这一行

one[] obj = new one[2];

您创建了一个包含两个元素的数组,但这些元素不是引用,而是one类型的对象。您根本不会实际创建one的任何实例。你可以这样做:

obj[0] = new one();

只有在创建这些实例后,才能像在此处一样为其字段指定值:

obj[0].name = "IBM";

在为obj[0]分配任何引用之前,它等于null

答案 3 :(得分:0)

one[] obj = new one[2];

上面的语句只是创建一个大小为2的One []类型,但它不包含任何一个对象

首先,您需要为该位置创建对象,然后才能设置名称。

   One temp = new One();
temp.name = "IBM";
        obj[0] = temp;

答案 4 :(得分:0)

当使用Java创建对象数组时,每个元素都初始化为null。您必须自己初始化每个元素。 例如:

one[] obj = new one[2];
for(int i = 0; i < obj.length; i++)
{
  obj[i] = new one();
}