-1

我想创建一个类对象数组并在不使用任何方法的情况下对其进行初始化,所以我编写了如下代码:

package test;

public class Test2 {
    private Test2() {
    }

    static Test2[] arr = new Test2[10];
    static {
        for (Test2 ob : arr) {
            ob = new Test2();
        }
        for (Test2 ob : arr) {
            System.out.println(ob);
        }
    }

    public static void main(String args[]) {
    }
}

但是当我运行这个程序时,我得到了 o/p:

null
null
null
null
....

为什么会这样?当我创建一个新对象时,似乎没有调用构造函数

4

5 回答 5

4

for (Test2 ob : arr) {为您提供对 . 中每个元素的引用的副本arr。当你写作时ob = new Test2();,你只是在改变ob所指的内容。这不会改变原始数组中的内容。

您需要编写类似的代码arr[n] = new Test2();

于 2014-06-10T12:05:47.243 回答
0

您所做的是更改ob变量 10 次,并且永远不要使用它的值。

在每次循环迭代ob中指向一个null对象arr,然后设置其值只是将其更改为指向new Test2(),与arr

你应该使用:

    for (int i=0;i<arr.length;i++) {
        arr[i] = new Test2();
    }
于 2014-06-10T12:06:47.580 回答
0

您正在创建对象,但它们从未存储在数组中。你需要这样的东西:

for (int i=0; i < arr.length; i++) {
    arr[i] = new Test2();
}
于 2014-06-10T12:07:16.823 回答
0

您正在初始化数组。您没有将数组中的引用设置为您初始化的 Test2 实例。

于 2014-06-10T12:08:42.237 回答
-2

我认为构造函数用于初始化为什么静态方法没有创建任何对象的对象。使用 new 运算符后跟构造函数为静态块中的该对象分配内存以创建对象数组。

于 2014-06-10T12:11:03.280 回答