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

时间:2011-11-09 13:33:40

标签: java object nullpointerexception

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

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

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

6 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

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

顺便说一句,如果你试图将其值实例化为null,那么尝试将其内部数据属性赋予null,例如。 TextView.setText(null);

对于您正在使用的课程,可能会有所不同。请查看developer.android.com

答案 3 :(得分:0)

您正在尝试访问null对象的成员..这就是问题..

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

markerObj = new objectClassName();

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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