Компилятор Java заставит вас инициализировать переменные, примитивы или ссылочные типы (например, объекты), иначе он выдаст ошибку компилятора и потерпит неудачу.
Однако при инициализации массива будет создан массив нужного размера, для каждого элемента будет установлено значение по умолчанию.Для примитивов это что-то вроде 0
для числовых типов, false
для логических значений.Для ссылочных типов по умолчанию используется null
.Это источник вашей проблемы.
Вы правильно инициализируете массив, но не заполняете его допустимыми значениями.Таким образом, это не связано с передачей по ссылке, а с правильной инициализацией массива и знанием значений по умолчанию для вновь инициализированного массива.
В частности, вы используете конструкцию for-each для зацикливаниямассив.Эта конструкция выполняет операцию над каждым объектом в коллекции / массиве.
Следовательно, этот код:
AnotherObject [] anotherObjectArray = new AnotherObject [1];
for (AnotherObject i: anotherObjectArray){
i.init(72,72);
}
эквивалентен этому коду:
AnotherObject [] anotherObjectArray = new AnotherObject [1];
for(int count=0; count < anotherObjectArray ; count++){
AnotherObject tempObj = anotherObjectArray[i]; // This is null, because anotherObjectArray[i] hasn't been initialised yet
tempObj.init(72,72); // This is where we get the NullPointerException :(
}
Вы видите проблему?Вы пытаетесь выполнить операцию с нулем, следовательно, NullPointerException
Я полагаю, что вы на самом деле намеревались это:
AnotherObject [] anotherObjectArray = new AnotherObject [1];
for(int count=0; count < anotherObjectArray ; count++){
AnotherObject tempObj = new AnotherObject(); // Here we create the new object
tempObj.init(72,72); // Initialise the newly created object
anotherObjectArray[i] = tempObj; // Now we store in the array :)
}
Я надеюсь, что объяснил это достаточно ясно, но, пожалуйста, спроситедля уточнения, если у меня нет :) 1028 *