C#系列之:類中的靜態變量的執行數序(補充)

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

 

當以一次引用類的時候,會對類中的靜態變量先按順序進行分配內存空間,當全部分配完內存空間之後,在對靜態變量按順序賦值。


發佈了44 篇原創文章 · 獲贊 73 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章