【问题标题】:Object initialization failed in static block静态块中的对象初始化失败
【发布时间】:2014-06-10 12:03:00
【问题描述】:

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

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

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

【问题讨论】:

  • 你没有正确初始化数组内容,为什么你想知道你得到了什么结果?

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    你应该使用:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-01-26
            • 1970-01-01
            • 2011-10-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-03-02
            相关资源
            最近更新 更多