静态块中的对象初始化失败

时间:2014-06-10 12:03:01

标签: java oop java-ee constructor static-block

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

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
....

为什么会这样?在创建新对象时似乎没有调用构造函数

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

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

在每次循环迭代ob指向null中的arr对象,然后设置其值只会将其更改为指向new Test2(),与{{1}无关}}

您应该使用:

arr

答案 2 :(得分:0)

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

for (int i=0; i < arr.length; i++) {
    arr[i] = new Test2();
}

答案 3 :(得分:0)

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

答案 4 :(得分:-2)

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