在方法內部定義的叫「區域性變數」,而不是靜態變數,區域性變數不能加static,包括protected,private,public這些也不能加,而全域性變數是可以的,靜態變數是定義在類中,方法體外面的,區域性變數是儲存在棧中的,而靜態變數儲存在方法區,區域性變數出了方法就會被棧**了,而靜態變數不會,所以區域性變數前不能加static關鍵字,同一時刻,只可能有一塊棧記憶體被當前方法使用,用完了就**了
可以換乙個角度理解,靜態變數和常量是在編譯時確定的,而方法的區域性變數是在執行時確定的,也就是說方法是可以變的,在方法體不在在被物件所使用的時候,方法體也就被**了,可是如果方法中有靜態方法就不可以了,因為靜態變數是不可以被**的,他會隨著類的存在而一直存在,所以這是矛盾的,所以方法中不可以有靜態變數,
而靜態方法中就必須要用靜態變數,而區域性靜態變數也是不可以的,同樣是因為這個原因,靜態方法是隨著類的存在而存在,所以他的變數也要求要一直存在,不允許有變數,甚至this,和super這些會隨著方法**被**的也不可以有。
為什麼靜態方法內部不能呼叫非靜態變數
要理解這個問題,首先我們需要什麼是靜態方法 靜態方法是用static關鍵字修飾的方法。我們使用學生類student來分析,public class student 靜態方法 public static string getjob 非靜態方法 public string getname public ...
非靜態內部類為什麼不能有靜態成員變數和靜態方法。
首先要明白以下三點 1 static型別的屬性和方法,在類載入的時候就會存在於記憶體中。2 要想使用某個類的static屬性和方法,那麼這個類必須要載入到虛擬機器 中。3 非靜態內部類並不隨外部類一起載入,只有在例項化外部類之後才會載入。現在考慮這個情況 在外部類並沒有例項化,內部類還沒有載入,這時...
靜態域 靜態變數 靜態方法
static關鍵字修飾的域 class employee 這裡employee物件有乙個例項域id和乙個靜態域nextid,每乙個employee物件都有乙個例項域id,但是所有的物件共享乙個靜態域nextid。假設有1000個employee物件,則有1000個例項域id,但是,只有乙個靜態域ne...