проблема в том, что этот массив может содержать несколько элементов в диапазоне от 2 до 30. Мне бы не хотелось, чтобы идея инициализировала его во втором конструкторе, если я сделаю это, если это не приведет к утечке памяти в функции 2так как у меня там есть объект, чью ссылку я передаю другой функции ????
Простой ответ: Нет. Инициализация массива не создает никаких объектов, только массив нулевых указателей.Даже если бы это произошло, Java делает беспокойство о «утечках» памяти плохой идеей.С другой стороны, стоит побеспокоиться об использовании памяти .Так как это язык для сборки мусора, нужно спросить: может ли сборщик мусора уменьшить объем памяти?Основное правило использования сборщика мусора таково: не держите лишних указателей в куче.Установив нулевые указатели в куче, почти всегда хорошо с точки зрения памяти.Указатели в стеке также почти всегда в порядке.
В вашем коде:
Ваш код трудно читать, потому что 1. Совершенно не ясно, что предполагается делать (это частькомпилятор?) 2. Ваша схема именования использует ключевые слова в языке / названиях классов, использованных в рефлексии 3. Здесь у вас есть немало кода, обычно лучше всего раскошелиться на код тура и начать его упрощать до абсолютно минимальногокод, который выдает вашу ошибку.
В частности, я не знаю, что должен делать этот фрагмент кода:
while(interfaces[parentInterfaceCount]!=null)
{
parentInterfaces[parentInterfaceCount]=interfaces[parentInterfaceCount];
}
Поскольку вы не увеличиваете parentInterfaceCount, этот код либо ничего не сделает, либо войдет в бесконечный цикл,Поэтому мне очень трудно понять, чего ты хочешь.Причина, по которой вы получаете исключение нулевого указателя, заключается в том, что parentInterfaces[parentInterfaceCount]
может быть адресовано только при инициализации parentInterfaces
.
Было бы легче помочь, если бы я знал, чего вы хотите достичь.
Тем не менее, я думаю, что у вас есть два варианта: либо инициализировать массив до максимального ожидаемого размера, либо использовать длину передаваемого вам массива, чтобы вычислить размер для инициализации во время выполнения.
Некоторые идеи, чтобы сделать жизнь проще:
- Использовать встроенный метод копирования массива, такой как
System.arraycopy
- Использовать цикл for - это упрощает обработку таких вещей, как увеличение указателя
- Использовать коллекционный класс