我需要帮助来理解如何用Java初始化类的对象。
我的代码是这样的:
...
Test t[] = null;
...
for (i=0;i<20;i++)
t[i] = new Test(10,20);
...
当我在Eclipse中编写上面的代码时,它给出了一个错误,指出“空指针访问:变量数据在此位置只能为空”。
我尝试了所有纠正错误的方法,但没有运气。
答案 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
}