初始化对象数组

时间:2013-08-09 15:57:38

标签: java arrays nullpointerexception initialization

我是Java的新手,所以这可能是一个愚蠢的问题。假设我创建了一个名为SomeObject的类,其中包含一些参数的简单getter和setter。接下来,我想创建一个包含该对象的3个实例的数组。谁能告诉我有什么不同之处:

SomeObject[] objectArray = {new SomeObject(),new SomeObject(),new SomeObject()};
objectArray[0].setValue(10);

SomeObject[] objectArray = new SomeObject[3];
objectArray[0].setValue(10);

在第一种情况下,我可以很好地获得对象[0]的值:

System.out.println(objectArray[0].getValue());

..而后者在尝试设置值时给出NullPointerException。我错过了一些东西,还是我犯了一些不同的错误?

4 个答案:

答案 0 :(得分:6)

创建对象数组时,实际上需要2个步骤

  1. 创建数组
  2. 创建对象
  3. 第一种方法同时执行两种方法,而第二种方法只执行第一种方法,因此对实际对象的引用为null

    Object[] objects = {new Object(),new Object(),new Object()};
    

    此处{...}创建数组,内部new创建对象。

    Object[] objects = new Object[3];
    

    此处new创建大小为3的数组。但是不创建单个元素,例如object[0],因此引用为null,这会导致异常。

答案 1 :(得分:2)

您的第一行代码会创建三个Object来填充数组。

你的第二行代码会创建一个空数组并且永远不会填充它,因此它仍然充满null

答案 2 :(得分:1)

第二个版本Object[] objects = new Object[3];创建一个大小为3的数组,但这些对象不存在,它们为空。

第一个,Object[] objects = {new Object(),new Object(),new Object()};在创建数组的同时显式创建对象,因此您可以访问它们

答案 3 :(得分:0)

如果你想以第二种方式做,你可以试试这个:

SomeObject[] objectArray = new SomeObject[3]; 
objectArray[0] = new SomeObject(); //create SomeObject
objectArray[0].setValue(10); //give SomeObject the value of 10