2011-11-09 34 views
0

後分配值成員變量我是新來的Java和獲得下列情況下的錯誤:錯誤而宣告對象空

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

但是,除去第一行後,它工作正常。 這是什麼問題?

回答

5

變量名稱只是引用。它們指向包含對象的內存空間(在堆中)。

當你做了MyObj myObject = new MyObj();,它做了兩件事:在內存中創建對象,並指向它的myObject引用。 因此,當你做myObject.sections時,它會跟隨參考,並在內存中檢查對象的部分部分。

然後,當你做myObject = null,你基本上銷燬你的引用和你的對象之間的聯繫在內存中。因此,在做myObject.sections時,Java無法繼續參考,因爲它沒有指向任何東西。所以它拋出一個NullPointerException

請注意,該對象本身是而不是銷燬myObject = null,只有參考無效。然後,垃圾收集器會檢測到您的對象無法訪問(如果沒有其他引用)並回收內存,從而破壞對象。

2

這正是它應該做的。
通過將null分配給變量,您明確聲明它不再綁定到實例。

因此,當您在代碼中引用sections時,請參閱不存在實例的sections成員。

0

您試圖訪問一個空對象的成員..這就是問題所在..

如果你想要一個新的實例.. 然後執行以下操作..

markerObj = new objectClassName(); 
0

你將值分配給marketObj所指的對象的字段。但是,由於markerObj沒有引用任何對象(它被設置爲null),所以不能進行賦值,您將得到一個NullPointerException。如果您不希望出現異常,則應先將對象分配給marketObj

0

如果您將對象標記爲null,則不能將值指定給其成員變量。

2

問題是,一旦你說markerObj = null它指向它的內存爲空,即它不啓動任何內存對象。所以你得到一個空指針錯誤。順便說一句,如果你試圖實例化它的值爲null,那麼嘗試給它的內部數據屬性爲空,例如。 TextView.setText(null);

也許它對您正在使用的班級有所不同。請在developer.android.com查看。

+1

這是一個Java問題,它不是特定於Android。我更願意將海報引用到[Java教程](http://download.oracle.com/javase/tutorial/java/index.html)。 –