後分配值成員變量我是新來的Java和獲得下列情況下的錯誤:錯誤而宣告對象空
markerObj = null;
markerObj.sections = RowData[1];
但是,除去第一行後,它工作正常。 這是什麼問題?
後分配值成員變量我是新來的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 = new objectClassName();
你將值分配給marketObj
所指的對象的字段。但是,由於markerObj
沒有引用任何對象(它被設置爲null
),所以不能進行賦值,您將得到一個NullPointerException。如果您不希望出現異常,則應先將對象分配給marketObj
。
如果您將對象標記爲null,則不能將值指定給其成員變量。
問題是,一旦你說markerObj = null
它指向它的內存爲空,即它不啓動任何內存對象。所以你得到一個空指針錯誤。順便說一句,如果你試圖實例化它的值爲null,那麼嘗試給它的內部數據屬性爲空,例如。 TextView.setText(null);
也許它對您正在使用的班級有所不同。請在developer.android.com查看。
這是一個Java問題,它不是特定於Android。我更願意將海報引用到[Java教程](http://download.oracle.com/javase/tutorial/java/index.html)。 –