在声明对象为null后将值赋给member-variable时出错

我是Java的新手并且在以下情况下遇到错误:

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

但是,删除第一行后,它工作正常。 有什么问题?

变量名只是引用。 它们指向包含对象的内存(在堆中)中的空间。

当你做MyObj myObject = new MyObj(); ,它做了两件事:在内存中创建对象,并将myObject引用指向它。 因此,当您执行myObject.sections ,它会跟随引用,并检查内存中对象的部分。

然后当你执行myObject = null ,你基本上会破坏你的引用和内存中对象之间的链接。 因此,当执行myObject.sections ,Java不再遵循引用,因为它不指向任何东西。 所以它抛出一个NullPointerException

请注意, myObject = null 不会破坏对象本身,只会使引用无效。 然后,垃圾收集器会检测到您的对象无法访问(如果没有其他引用)并回收内存,则会破坏该对象。

这正是应该做的。
通过为变量赋值null ,您可以明确声明它不再绑定到实例。

因此,当您引用代码中的sections ,您将引用不存在的实例的sections成员。

问题是,一旦你说markerObj = null它就会将内存指向null,即它不会向它启动任何内存对象。 所以你得到一个空指针错误。

顺便说一句,如果您尝试将其值实例化为null,则尝试将其内部数据属性设置为null,例如。 TextView.setText(null);

也许它因您正在使用的课程而异。 在developer.android.com上查看。

你试图访问一个空对象的成员..这是问题..

如果你想要一个新的实例..然后做以下..

 markerObj = new objectClassName(); 

您将值分配给由marketObj引用的对象的字段。 但是,由于markerObj不引用任何对象(它设置为null ),因此无法进行赋值,您将获得NullPointerException。 如果您不希望出现exception,则应首先将对象分配给marketObj

如果将对象标记为null,则无法为其成员变量赋值。