static靜態變量的實例與分析
class class1 { static int i = getNum(); int j = getNum(); static int num = 1; static int getNum() { return num; } static void Main(string[] args) { Console.WriteLine("i={0}",i); Console.WriteLine("j={0}", new class1().j); Console.Read(); } }
分析:Console.WriteLine("i={0}",i);這裏i是static變量,而且類class1是第一次被引 用,要先爲class1裏面所有的static變量分配內存。儘管現在有超線程技術,但是指令在邏輯還是一條一條的按順序執行的,所以先爲static int i分配內存,並且在該內存中保持int的缺省值0,接着再爲static int num 變量分配內存,值當然也爲0。
然後執行第二步,爲變量賦值:先爲static int i變量賦值,i=getNum(),看getNum裏面的代碼,就是return num,這個時候num的值是0,於是i就爲0了。然後對變量num賦值,num=1;這行代碼執行後,num就爲1了。
所以最後的結果爲:
i=0 j=1
當以一次引用類的時候,會對類中的靜態變量先按順序進行分配內存空間,當全部分配完內存空間之後,在對靜態變量按順序賦值。