using system;
namespace teststatic
static void main(string args)
",i);
console.writeline("j=", new class1().j);
console.read();}}
}上面的**是乙個網友告訴我的,讓我看看結果,我看了一眼馬上說結果是
i=1
j=1
網友執行後說結果是
i=0
j=1
下面我解釋一下為什麼是後一種結果 :
對乙個類來說,static變數是與物件無關的,那麼它們什麼時候被初始化呢? 就是在第一次引用的時候。
當類例項化的時候,可以簡單分成3步如下
1,為所有static變數分配記憶體,這個時候記憶體裡面的值是該變數型別的預設值。
2,為static變數賦值。
3,生成物件,呼叫建構函式,先呼叫這個類的父類的建構函式,然後呼叫類本身的建構函式,生成物件。
現在分析上面的**:
console.writeline(string.format("i=",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了。
類的初始化步驟 :
1. 初始化靜態變數(如果有)
2. 類的靜態建構函式(如果有)
3. 初始化例項變數
4. 初始化例項建構函式
注意,只是對值型別賦預設初值。
c 類中的static成員
概念 宣告為static的類成員稱為類的靜態成員 用static修飾的成員變數為,靜態成員變數,用static修飾的成員函式為,靜態成員函式。靜態成員變數一定要在類外進行初始化。特性 1 靜態成員為所有類物件所共享,不屬於某個具體的例項 2 靜態成員必須在類外定義 3 類靜態成員可以用 類名 靜態成...
C 類中static變數
using system namespace param stathread static void main string args i console.writeline string.format j new class1 j console.read 上面的 是乙個告訴我的,讓我看看結果,我...
類的static成員
類static成員的兩個問題 如果需要在乙個類的各個物件間互動,即需要乙個資料物件為整個類而非某個物件服務,這個時候常用類成員來解決問題。1 靜態資料成員要在類外定義。class teststatic static int teststaticfunction teststatic obj priv...