為什麼靜態方法不能呼叫非靜態方法?

2021-09-11 16:32:20 字數 306 閱讀 7244

1. 靜態方法是屬於類的,即靜態方法是隨著類的載入而載入的,在載入類時,程式就會為靜態方法分配記憶體,而非靜態方法是屬於物件的,物件是在類載入之後建立的,也就是說靜態方法先於物件存在。

2. 當你建立乙個物件時,程式為其在堆中分配記憶體,一般是通過this指標來指向該物件。靜態方法不依賴於物件的呼叫,它是通過『類名.靜態方法名』這樣的方式來呼叫的。而對於非靜態方法,在物件建立的時候程式才會為其分配記憶體,然後通過類的物件去訪問非靜態方法。

3. 因此在物件未存在時非靜態方法也不存在,靜態方法自然不能呼叫乙個不存在(非靜態)的方法。

具體例項見:小靜仔的部落格

靜態方法為什麼不能呼叫非靜態方法?細品

靜態方法為什麼不能呼叫非靜態方法!針對這個問題。有如下兩點要說 靜態方法是把方法由物件層級提公升到類層級。這就使得這個方法在類開始載入的時候就在記憶體中分配了區域,即這個方法在程式run時就開始存在了。反之,物件層級的方法也就是 非靜態方法 只有在這個方法的物件被呼叫時才會去記憶體中分配區域,即這個...

為什麼靜態方法內部不能呼叫非靜態變數

要理解這個問題,首先我們需要什麼是靜態方法 靜態方法是用static關鍵字修飾的方法。我們使用學生類student來分析,public class student 靜態方法 public static string getjob 非靜態方法 public string getname public ...

靜態方法不能呼叫非靜態方法的原因

1.靜態方法優先於物件被建立 2.非靜態方法通過物件建立 3.靜態方法在記憶體中建立後,還沒有建立物件,所以不能呼叫非靜態方法和變數。null 型別呼叫靜態方法,輸出什麼?public class test public static void main string args 問輸出什麼?輸出是p...