程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 未將對象引用到實例,對象引用實例

未將對象引用到實例,對象引用實例

編輯:C#入門知識

未將對象引用到實例,對象引用實例


對象為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時調用給對象的屬性或方法

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved