在他的构造函数中有Obj
类System.out.println("Hello world!") ;
我使用 - Obj[] objArray = new Obj[10] ;
创建了这个类的数组,没有打印,意味着 - 没有调用Obj
的实例。有没有办法创建这样的数组,但有实例,除了在for循环中创建它们?
答案 0 :(得分:3)
好吧,既然你想知道除了使用for循环之外的一种方法,你可以这样做: -
Obj[] objArray = {new Obj(), new Obj(), new Obj()};
这里发生的是,您正在使用数组元素直接初始化数组引用。 现在,实际数组对象的类型是从LHS上的数组引用类型推断出来的。
因此,使用该声明,将创建一个大小为3的数组(在上例中),数组中的每个索引都以给定顺序的instance
类Obj
初始化。 / p>
我建议的更好方法是使用ArrayList
,在这种情况下,您double-braces initialization
无需循环即可初始化List
。此外,还有一个额外的优势,您可以随时添加新元素。因为它是dynamically increasing
数组。
List<Object> list = new ArrayList<Object>() {
{
add(new Obj());
add(new Obj());
add(new Obj());
}
}; // Note the semi-colon here.
list.add(new Obj()); // Add another element here.
答案 1 :(得分:3)
到目前为止,答案很好,很有帮助。我在这里只是为了提醒你
Obj[] objArray = new Obj[10];
Arrays.fill(objArray, new Obj());
但是,这只会为数组的所有元素分配一个引用(对新的Obj())。
答案 2 :(得分:1)
执行Obj[] objArray = new Obj[10] ;
时
您只创建一个引用数组以指向实际的'Obj`对象。
但在你的情况下,永远不会创建实际的Obj对象。
for (int i = 0; i < objArray.length; i++) {
objArray[i] = new Obj();
}
执行上述操作将打印所需的内容。
最后执行System.out.println(Arrays.deepToString(objArray))
打印所有toString()
Obj
答案 3 :(得分:1)
Obj[] objArray = new Obj[10] ;
只创建一个能够容纳10个Objs的数组。要将Objs放入数组,您需要使用Rohit的方法或编写一个简单的for
循环来一次初始化一个数组条目:
for (int i = 0; i < 10; i++) {
objArray[i] = new Obj();
}
或者,没有for循环:
int i = 0;
while (i < 10) {
objArray[i] = new Obj();
i++;
}