靜態方法為什麼不能呼叫非靜態方法!
針對這個問題。有如下兩點要說:
靜態方法是把方法由物件層級提公升到類層級。這就使得這個方法在類開始載入的時候就在記憶體中分配了區域,即這個方法在程式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...