NullPointerException при создании массива объектов

Я пытаюсь создать массив classа, содержащего два значения, но когда я пытаюсь применить значение к массиву, я получаю исключение NullPointerException.

public class ResultList { public String name; public Object value; public ResultList() {} } 

,

 public class Test { public static void main(String[] args){ ResultList[] boll = new ResultList[5]; boll[0].name = "iiii"; } } 

Почему я получаю эту ошибку и как ее исправить?

Вы создали массив, но ничего не поместили в него, поэтому у вас есть массив, содержащий 5 элементов, все из которых равны нулю. Вы можете добавить

 boll[0] = new ResultList(); 

перед строкой, где вы устанавливаете boll [0] .name.

 ResultList[] boll = new ResultList[5]; 

создает массив размером = 5, но не создает элементы массива.

Вы должны создать экземпляр каждого элемента.

 for(int i=0; i< boll.length;i++) boll[i] = new ResultList(); 

я думаю, позвонив

  ResultList[] boll = new ResultList[5]; 

вы создали список, который может содержать 5 ResultList, я думаю, вы должны инициализировать boll [0] до того, как вы установите значение.

 boll[0] = new ResultList(); 

Как многие говорили в предыдущих ответах, ResultList[] boll = new ResultList[5]; просто создает массив ResultList с размером 5, где все элементы равны нулю. Когда вы используете boll[0].name , вы пытаетесь сделать что-то вроде null.name и это является причиной null.name NullPointerException. Используйте следующий код:

 public class Test { public static void main(String[] args){ ResultList[] boll = new ResultList[5]; for (int i = 0; i < boll.length; i++) { boll[i] = new ResultList(); } boll[0].name = "iiii"; } } 

Здесь цикл for в основном инициализирует каждый элемент массива с помощью объекта ResultList , и как только цикл for завершен, вы можете использовать

 boll[0].name = "iiii"; 

Кроме того, вы можете доказать это сами, добавив строку отладки в свой class, например:

 public class ResultList { public String name; public Object value; public ResultList() { System.out.println("Creating Class ResultList"); } } 

Всякий раз, когда создается объект, должен быть вызван один из его конструкторов (если нет конструктора, по умолчанию создается автоматически, аналогично тому, который у вас уже есть в вашем classе). Если у вас есть только один конструктор, то единственным способом создания объекта является вызов этого конструктора. Если линия

 ResultList[] boll = new ResultList[5]; 

действительно создано 5 новых объектов, вы увидите, что ваша строка отладки появляется на консоли 5 раз. Если это не так, вы знаете, что конструктор не вызывается. Также обратите внимание, что в приведенной выше строке нет списка параметров с открытыми и закрывающимися скобками «()», поэтому он не является вызовом функции или конструктором. Вместо этого мы имеем в виду только тип. Мы говорим: «Мне нужно пространство для массива объектов ResultList, всего до 5». После этой строки все, что у вас есть, это пустое пространство, а не объекты.

При тестировании различных исправлений строка отладки поможет подтвердить, что вы получаете то, что хотите.

 ResultList p[] = new ResultList[2]; 

Записав это, вы просто выделите пространство для массива из 2 элементов. Вы должны инициализировать контрольную переменную, выполнив следующее:

 for(int i = 0; i < 2; i++){ p[i] = new ResultList(); } 
 class ResultList { public String name; public Object value; public ResultList() {} } public class Test { public static void main(String[] args){ ResultList[] boll = new ResultList[5]; boll[0] = new ResultList(); //assign the ResultList objet to that index boll[0].name = "iiii"; System.out.println(boll[0].name); } } 

Пока вы не создали объект ResultSet, но каждый индекс пуст, который указывает на нулевую ссылку, по которой вы получаете нуль. Поэтому просто назначьте Object по этому индексу, а затем установите значение.

в первую очередь вы создали 5 элементов типа ResultList, но при вставке значения вы вставляете имя и значение неправильно. вы можете использовать конструктор для создания и вставки значений в элементы массива.

 class ResultList { public String name; public Object value; public ResultList(String name,Object value){ this.name = name; this.value = value; System.out.println(name+" --- "+value); } } public static void main(String[] args) { ResultList[] boll = new ResultList[5]; boll[0] = new ResultList("myName","myValue"); } 

Либо вы можете попробовать этот сценарий, либо сделать переменную «name» static в classе ResultList. Поэтому, когда ResultList [] boll = новый ResultList [5]; будет выполняться в это время вся переменная из этого classа получит назначение

 public static void main(String[] args){ ResultList[] boll = new ResultList[5]; boll[0] = new ResultList(); boll[0].name = "iiii"; System.out.println(boll[0].name); } public class ResultList { public static String name; public Object value; public ResultList() {} } 
  • Как создать неизменяемый массив в Swift?
  • C # поиск ближайшего значения в массиве
  • Создать матрицу, содержащую все комбинации элементов, взятых из n векторов
  • Проверить строку для палиндрома
  • Разница между массивом int и массивом int
  • Почему C ++ поддерживает поэтапное назначение массивов внутри структур, но не в целом?
  • Сохраняется ли порядок элементов в списке JSON?
  • Многомерные массивы в Swift
  • Прочтите .txt-файл в 2D-массив
  • Преобразование Mat в массив / вектор в OpenCV
  • Как проверить, находится ли элемент в массиве
  • Давайте будем гением компьютера.