類中變數初始化

2021-08-18 08:50:04 字數 1415 閱讀 1590

類中的變數(包括基本資料型別,物件引用)在載入物件位元組碼進記憶體,在使用其之前,呼叫構造方法之前就已經完成初始化賦值了。其中static 修飾的變數在載入物件位元組碼時時就賦值了,其他變數在這以後被賦值,也就是static 修飾的先賦值。

驗證**如下:

package cn.ytu.en;

class circle

circle(int a)

}class thirdcircle

//普通**塊

//靜態物件引用

static circle c1=new circle();

thirdcircle()

//普通物件引用

circle c3=new circle(3);

thirdcircle(int a)

}public class inittest

/*輸出結果如下:

*  * inittest()

* circle()+5

* 0* circle()

* circle()+1

* circle()+3

* 8* thirdciecle()

* circle()+2

* end

* circle()+1

* circle()+3

* thirdciecle()+1

* circle()+4

*  * 

* */

}從結果可以看出,在建立 thirdcircle 物件( new thirdcircle()),呼叫其構造方法之前,類中變數就已經完成其初始化過程。1、static 修飾的先執行,無論是static **塊還是變數,這兩個的執行順序是由其在類中的位置決定的,如上例,static**塊與static circle c1 先完成初始化,且static**塊在static circle c1 之前,所以static**塊先執行,如果static circle c1 在前,則它先執行。同理普通**塊與普通物件引用初始化也是如此。

2、在static 修飾的完成初始化之後,再是其他變數完成初始化

,如c3以及thirdcircle類中的變數b。

3、等所有的變數都完成了初始化過程以後,構造方法才被呼叫,生成物件。

4、static 修飾的,無論是**塊還是變數,在乙個類中只會被呼叫一次,不管是建立幾個類物件。如上例new thirdcircle(1),第二次建立 thirdcircle 物件,static **塊與 static circle c1=new circle()  不再被呼叫了,總共只被呼叫了一次

5、除了static以外的**塊和變數,呼叫次數與建立物件數一一對應。如上例new thirdcircle(1),第二次建立 thirdcircle 物件,以及 circle c3=new circle(3) 依然被呼叫了,這樣總共被呼叫了兩次

以上就是類中變數初始化過程了。

C 類變數初始化

c 類變數初始化 c 為中類物件的構造順序是這樣的 1.分配記憶體,呼叫建構函式時,隱式 顯示的初始化各資料成員 2.進入建構函式後在建構函式中執行一般計算 c 類中變數的初始化 1.初始化列表 csomeclass csomeclass x 0 y 1 const常量定義必須初始化,且必須使用初始...

類成員變數初始化

在 c 中,類的成員變數未初始化問題,取決於物件建立方式,不同的建立方式,直接導致類成員變數的初值不同。本文通過下例,得出一下結論 1.在函式體內置立乙個物件,類成員變數和普通的區域性變數一樣,是乙個隨機值。2.建立乙個全域性成員物件,類成員變數和全域性變數一樣,編譯器賦值為 0。3.在函式體內 n...

C 類中成員變數初始化

c 類中成員變數包括主要四種 普通成員變數,常量成員變數,靜態成員變數,靜態常量成員變數 上述成員變數該如何初始化,注意不是賦值。由於普通成員變數和常量成員變數,每乙個類例項化,都乙份記憶體拷貝。c 規定成員變數在宣告 注意宣告與定義區別 時,不允許初始化,因此這些變數只能放在建構函式初始化列表中。...