要理解這個問題,首先我們需要什麼是靜態方法:靜態方法是用static關鍵字修飾的方法。
我們使用學生類student來分析,
public
class
student
// 靜態方法
public
static string getjob()
// 非靜態方法
public string getname()
public
static
void
main
(string[
] args)
}
我們可以看到,在呼叫靜態方法getjob()時,可以使用類名直接呼叫,也可以使用例項化物件呼叫。
但是,呼叫非靜態方法getname()時,只能使用例項化物件呼叫,使用類名呼叫會報錯。
可以理解為,靜態方法是屬於整個類的,而非靜態方法只能通過物件呼叫,student類的job都是學生,但是並不能得出student類的name都是「蘇蘇的唐」。
回到問題本身,為什麼靜態方法內部不能呼叫非靜態變數,因為靜態方法是屬於整個類的,非靜態變數只在屬於某個物件時有值,而屬於類時是空的,所以不能呼叫。
為什麼靜態方法不能呼叫非靜態方法?
1.靜態方法是屬於類的,即靜態方法是隨著類的載入而載入的,在載入類時,程式就會為靜態方法分配記憶體,而非靜態方法是屬於物件的,物件是在類載入之後建立的,也就是說靜態方法先於物件存在。2.當你建立乙個物件時,程式為其在堆中分配記憶體,一般是通過this指標來指向該物件。靜態方法不依賴於物件的呼叫,它是...
靜態方法為什麼不能呼叫非靜態方法?細品
靜態方法為什麼不能呼叫非靜態方法!針對這個問題。有如下兩點要說 靜態方法是把方法由物件層級提公升到類層級。這就使得這個方法在類開始載入的時候就在記憶體中分配了區域,即這個方法在程式run時就開始存在了。反之,物件層級的方法也就是 非靜態方法 只有在這個方法的物件被呼叫時才會去記憶體中分配區域,即這個...
非靜態內部類為什麼不能有靜態成員變數和靜態方法。
首先要明白以下三點 1 static型別的屬性和方法,在類載入的時候就會存在於記憶體中。2 要想使用某個類的static屬性和方法,那麼這個類必須要載入到虛擬機器 中。3 非靜態內部類並不隨外部類一起載入,只有在例項化外部類之後才會載入。現在考慮這個情況 在外部類並沒有例項化,內部類還沒有載入,這時...