0

我需要帮助来理解如何在 Java 中初始化一个类的对象。

我的代码是这样的:

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

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

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

4

6 回答 6

5

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

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属性获取数组的长度。

于 2015-01-27T05:17:49.943 回答
2

您需要通过指定数组的大小来初始化数组。

Test[] t = new Test[20];

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

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

于 2015-01-27T05:45:48.200 回答
2

在 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。

于 2015-01-27T05:46:24.090 回答
1

需要像下面一样初始化你的数组 test[]然后使用它

Test[] t = new Test[20];
于 2015-01-27T05:31:20.817 回答
-1

尝试

Test[] t = new Test[20];

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

于 2015-01-27T05:20:35.603 回答
-1

在 java 中,数据类型可以是原始的或引用的。引用类型是类或接口类型或数组类型。当您要创建对象数组时,首先需要声明并实例化数组对象本身,然后实例化该类所需的对象并将它们分配给数组对象。

 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
    }
于 2015-01-27T05:23:36.437 回答