在声明对象为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,则无法为其成员变量赋值。