類中的 static 字段

2022-05-25 07:06:14 字數 1018 閱讀 8922

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...