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

2021-08-19 17:27:50 字數 752 閱讀 1460

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

針對這個問題。有如下兩點要說:

靜態方法是把方法由物件層級提公升到類層級。這就使得這個方法在類開始載入的時候就在記憶體中分配了區域,即這個方法在程式run時就開始存在了。

反之,物件層級的方法也就是<非靜態方法>只有在這個方法的物件被呼叫時才會去記憶體中分配區域,即這個方法在什麼時候使用才什麼時候產生、存在。

因此。靜態方法無法呼叫非靜態方法。即等同於已存在的物件呼叫暫且不存在的物件,這當然是錯誤的。

通過上面的解釋,大家知道,要想達成——有→無這一過程。也就是讓非靜態方法提前存在,也就是在程式run載入main主方法時,就例項化非靜態方法的物件即可。

如下**所示:

public class test

//靜態方法

publid static void test1()

//main入口

public static void main(string args)

}

靜態方法屬於類層級。

非靜態方法屬於物件層級。

以上,也就是為什麼靜態方法不能呼叫非靜態方法的原因。

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

1.靜態方法是屬於類的,即靜態方法是隨著類的載入而載入的,在載入類時,程式就會為靜態方法分配記憶體,而非靜態方法是屬於物件的,物件是在類載入之後建立的,也就是說靜態方法先於物件存在。2.當你建立乙個物件時,程式為其在堆中分配記憶體,一般是通過this指標來指向該物件。靜態方法不依賴於物件的呼叫,它是...

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

要理解這個問題,首先我們需要什麼是靜態方法 靜態方法是用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...