未將對象引用到實例


對象為null時調用給對象的屬性或方法

“未將對象引用到實例”是很多像我一樣的初學者經常遇到的一個問題,常常令人煩惱不已,那么這個問題是怎么發生的呢?先給大家看一張圖,我們從這張圖入手來分析這個錯誤造成的原因。

Cache_-11696fb49a65ca67.

可能很多人看到這樣的代碼會覺得可笑:”能寫出這樣的代碼,看來此人的智商已“超越”人類的范疇了!“

但是就是有某些內褲外穿的超人叔叔經常不間歇性的寫出這樣的代碼、遇到這樣的問題。

從這張圖上我們很容易看出Too.f1.array[i]是為null的,這時我們調用它的屬性或方法是肯定會報錯的!那為什么當對象為null時調用它的屬性或方法會報錯呢?

我們都知道數組是引用類型,引用類型的數據值會存放在堆內存中在棧中存儲的只是一串內存地址如圖所示:

image

通過這張圖我們可以看到它的屬性是存放在堆內存中的,而對象為null就是指該對象沒有在堆內存中開辟空間,也就沒辦法通過棧內存訪問到存放在堆內存中的屬性,所以系統運行時就會提示錯誤。

引用類型數據賦給另一個同類型引用類型數據所帶來的問題

我們再來看一張圖:

image

初看這多代碼好像並沒有什么“不妥”,語法上也沒報錯!但是運行時卻出現了未將對象引用到實例的問題附圖一張:

image

這又是怎么回事呢?我們前面說過棧內存中存儲的是一串堆內存的內存地址。而sb=txt只是將數組txt在堆內存中的內存地址賦給了數組sb也就是說數組txt和數組sb在棧內存中存儲的堆內存的內存地址是一樣的,而txt[0]=null也就是將txt【0】對應的在堆內存中的空間給刪除,而數組txt和數組sb是共用一樣的堆內存中的內存地址所以數組sb【0】也沒有對應的堆內存的內存空間所以會在運行時報錯,原理請參照對象為null時調用給對象的屬性或方法

謹以此文獻給超越人類的樂樂同志!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM