在Java中初始化对象数组

时间:2015-01-27 05:16:27

标签: java arrays initialization array-initialization

我需要帮助来理解如何用Java初始化类的对象。

我的代码是这样的:

...
Test t[] = null;
...
for (i=0;i<20;i++)
   t[i] = new Test(10,20);
...

当我在Eclipse中编写上面的代码时,它给出了一个错误,指出“空指针访问:变量数据在此位置只能为空”。

我尝试了所有纠正错误的方法,但没有运气。

6 个答案:

答案 0 :(得分:4)

您需要为数组本身分配空间,然后初始化它们。

Test[] t = new Test[20];
for (i = 0; i < 20; i++) {
    t[i] = new Test(10, 20);
}

如果数组的长度是可变的,您可以像传递任何其他变量一样传递值。

int arraySize = 35;
Test[] t = new Test[arraySize];
for (i = 0; i < arraySize; i++) {
    t[i] = new Test(10, 20);
}

初始化后,数组大小是固定的,但您始终可以使用arr.length属性获取数组的长度。

答案 1 :(得分:2)

您需要通过指定数据来初始化数组。

Test[] t = new Test[20];

如果您不想限制数组大小。您可以考虑使用ArrayList,将As元素添加到ArrayList,其容量会自动增长。

List<Test> testList = new ArrayList<Test>();

答案 2 :(得分:1)

需要初始化您的数组测试[] ,如下所示,然后使用它

Test[] t = new Test[20];

答案 3 :(得分:1)

在Java中,对象数组是不可变的,必须初始化。

有几件事要做。

您可以在分配期间提供元素:

Test t[] = { new Test(10, 20), new Test(30, 40) };

如果您不知道这些值,可以为数组分配适当的分配:

Test t[] = new Test[4];

在您的情况下,您仍然需要初始化阵列。

一般来说,除非变量是最终的,否则在声明时不需要这样做。

Test t[];            // declaration

t[] = new Test[20];  // assignment

for ( i=0 ; i<20 ; i++ ) {

    t[i] = new Test(10,20);

}

Java还有一组用于列表,数组,键值集和链接列表的类。

如果您需要使用可变数组,请使用ArrayList对象。

这样可以避免初始化。

这是一个简短的例子:

ArrayList<Test> t = new ArrayList<Test>();

for( i=0 ; i<20 ; i++ ) {

    t.add(new Test(10,20));

}

与不可变对象数组相比,可变列表的成本很高,但Java编码器使用ArrayList函数实际调整了System.arraycopy()类。

所以你不会看到很多性能下降。

简单地说,只有在完全无法知道所需的分配空间时才使用可变的ArrayList。

答案 4 :(得分:-1)

尝试

Test[] t = new Test[20];

当你将t设置为null时,它会尝试访问不存在的数组。

答案 5 :(得分:-1)

在java中,数据类型可以是原始类型或引用。引用类型是Class或Interface类型或Array类型。 如果要创建对象数组,首先需要声明并实例化数组Object本身,然后实例化类所需的对象并将它们分配给数组对象。

 ArrayDataType[] ArrayName=new ArrayDataType[Dimensions];
    for(int i=0;i<Dimensions;i++){
    Arrayname[i]=new ObjectDataType();  
    \\ where the ObjectDatatype can be either ArrayDataType or SubType
    }