Ответ 1
Вы создали массив, но ничего не поместили в него, поэтому у вас есть массив, содержащий 5 элементов, все из которых равны нулю. Вы можете добавить
boll[0] = new ResultList();
перед строкой, где вы устанавливаете boll [0].name.
Я пытался создать массив класса, содержащий два значения, но когда я пытаюсь применить значение к массиву, я получаю исключение NullPointerException.
public class ResultList {
public String name;
public Object value;
}
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
, и это является причиной исключения 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";
Кроме того, вы можете доказать это сами, добавив строку отладки в свой класс, например:
public class ResultList {
public String name;
public Object value;
public ResultList() {
System.out.println("Creating Class ResultList");
}
}
Всякий раз, когда создается объект, должен быть вызван один из его конструкторов (если нет конструктора, по умолчанию создается автоматически, аналогично тому, который у вас уже есть в вашем классе). Если у вас есть только один конструктор, то единственным способом создания объекта является вызов этого конструктора. Если линия
ResultList[] boll = new ResultList[5];
действительно создано 5 новых объектов, вы увидите, что ваша строка отладки появляется на консоли 5 раз. Если это не так, вы знаете, что конструктор не вызывается. Также обратите внимание, что в приведенной выше строке нет списка параметров с открытыми и закрывающимися скобками "()", поэтому он не является вызовом функции или конструктором. Вместо этого мы имеем в виду только тип. Мы говорим: "Мне нужно пространство для массива объектов ResultList, всего до 5". После этой строки у вас есть пустое пространство, а не объекты.
При тестировании различных исправлений строка отладки поможет подтвердить, что вы получаете то, что хотите.
ResultList p[] = new ResultList[2];
Записывая это, вы просто выделяете пространство для массива из двух элементов. Вы должны инициализировать ссылочную переменную, выполнив следующее:
for(int i = 0; i < 2; i++){
p[i] = new ResultList();
}
в первую очередь вы создали 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");
}
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 по этому индексу, а затем установите значение.
Либо вы можете попробовать этот сценарий, либо сделать переменную "name" static в классе ResultList. Поэтому, когда ResultList [] boll = новый ResultList [5]; будет выполняться в это время вся переменная из этого класса получит назначение
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() {}
}