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

2021-10-07 14:16:40 字數 658 閱讀 9613

要理解這個問題,首先我們需要什麼是靜態方法:靜態方法是用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 非靜態內部類並不隨外部類一起載入,只有在例項化外部類之後才會載入。現在考慮這個情況 在外部類並沒有例項化,內部類還沒有載入,這時...