Ошибка при назначении значения переменной-члену после объявления объекта пустым - PullRequest
0 голосов
/ 09 ноября 2011

Я новичок в Java и получаю сообщение об ошибке в следующем случае:

markerObj = null;
markerObj.sections = RowData[1];

Но после удаления первой строки все работает нормально. В чем проблема?

Ответы [ 6 ]

5 голосов
/ 09 ноября 2011

Имена переменных являются только ссылками. Они указывают на пространство в памяти (в куче), которое содержит объект.

Когда вы делаете MyObj myObject = new MyObj();, он делает две вещи: создает объект в памяти и указывает на него ссылку myObject. Поэтому, когда вы делаете myObject.sections, он следует по ссылке и проверяет часть разделов вашего объекта в памяти.

Затем, когда вы делаете myObject = null, вы в основном разрушаете связь между вашей ссылкой и вашим объектом в памяти. Следовательно, при выполнении myObject.sections Java больше не может следовать ссылке, потому что она ни на что не указывает. Так бросает NullPointerException

Обратите внимание, что сам объект не уничтожен myObject = null, аннулируется только ссылка. Затем сборщик мусора обнаруживает, что ваш объект недоступен (если на него нет другой ссылки), и восстанавливает память, уничтожая объект.

2 голосов
/ 09 ноября 2011

Проблема в том, что, как только вы говорите markerObj = null, он указывает, что его память равна нулю, то есть он не инициирует никаких объектов памяти.Таким образом, вы получаете ошибку нулевого указателя.

Кстати, если вы пытаетесь создать экземпляр значения NULL, попробуйте присвоить свойству внутренних данных значение NULL, напр.TextView.setText(null);

Возможно, это зависит от класса, который вы используете.Проверьте это на developer.android.com .

2 голосов
/ 09 ноября 2011

Это именно то, что он должен делать.
Присваивая null переменной, вы явно заявляете, что она больше не связана с экземпляром.

Таким образом, когда вы ссылаетесь на sections в своем коде, вы ссылаетесь на sections член несуществующего экземпляра.

0 голосов
/ 09 ноября 2011

Если вы пометите объект как нулевой, вы не сможете присвоить значения его переменным-членам.

0 голосов
/ 09 ноября 2011

Вы присваиваете значение полю объекта, на которое ссылается marketObj. Однако, поскольку markerObj не ссылается на какой-либо объект (он установлен на null), назначение не может быть выполнено, и вместо этого вы получите исключение NullPointerException. Если вы не хотите, чтобы исключение появлялось, вы должны сначала назначить объект marketObj.

0 голосов
/ 09 ноября 2011

вы пытаетесь получить доступ к члену нулевого объекта .. в этом проблема ..

если вы хотите новый экземпляр .. затем выполните следующее ..

markerObj = new objectClassName();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...