0

Obj在他的构造函数中有类System.out.println("Hello world!") ;

我创建了一个此类使用的数组 -并且没有打印任何内容,这意味着 - 没有调用Obj[] objArray = new Obj[10] ; 任何实例。Obj有没有办法创建这样的数组,但是除了在 for 循环中创建它们之外,还有实例?

4

4 回答 4

3

好吧,既然你想知道除了使用 for 循环之外的方法,你可以这样做: -

Obj[] objArray = {new Obj(), new Obj(), new Obj()};

这里发生的是,您正在使用数组元素直接初始化您的数组引用。现在,实际数组对象的类型是从 LHS 上的数组引用类型推断出来的。

因此,通过该声明,创建了一个大小为 3 的数组(在上述情况下),数组中的每个索引都使用给定顺序instance的类初始化。Obj


我建议的更好方法是使用ArrayList,在这种情况下,您必须在没有 for 循环的情况下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.
于 2012-11-24T20:56:46.807 回答
3

到目前为止的答案很好而且很有帮助。我在这里只是为了提醒你

Obj[] objArray = new Obj[10];
Arrays.fill(objArray, new Obj());

但是,这只会为数组的所有元素分配一个引用(对新的 Obj())。

于 2012-11-24T21:02:23.147 回答
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

于 2012-11-24T20:59:18.027 回答
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++;
}
于 2012-11-24T20:59:36.293 回答