Ошибка инициализации объекта в статическом блоке
Я хочу создать массив объектов класса и инициализировать его также без использования какого-либо метода, поэтому я написал такой код:
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 ответов
for (Test2 ob : arr) {
дает вам копию ссылки на каждый элемент в arr
, Когда ты пишешь ob = new Test2();
ты просто меняешь то, что ob
имеет в виду. Это не меняет того, что находится в исходном массиве.
Вам нужно написать код, как arr[n] = new Test2();
вместо.
Вы инициализируете массив. Вы не устанавливаете ссылку в массиве на экземпляр Test2, который вы инициализировали.
Вы создаете объекты, но они никогда не сохраняются в массиве. Вам нужно что-то вроде этого:
for (int i=0; i < arr.length; i++) {
arr[i] = new Test2();
}
То, что вы делаете, меняется ob
переменная 10 раз, и никогда не используйте ее значение.
На каждой итерации цикла ob
указывает на null
объект в arr
, затем установка его значения просто меняет его, чтобы указать new Test2()
, не связанные с arr
Вы должны использовать:
for (int i=0;i<arr.length;i++) {
arr[i] = new Test2();
}
Я думаю, что конструктор используется для инициализации объекта, поэтому статический метод не создает никакого объекта. используйте оператор new, а затем конструктор для выделения памяти этому объекту в статическом блоке для создания массива объектов.