我想创建一个类对象数组并在不使用任何方法的情况下初始化它,所以我编写了这样的代码:
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
....
为什么会这样?在创建新对象时似乎没有调用构造函数
答案 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运算符后跟构造函数在静态块中为该对象分配内存以创建对象数组。