類成員初始化

2021-07-09 02:23:24 字數 2517 閱讀 4487

在類內部:初始化的順序

靜態的成員變數;

普通的成員變數;

構造器的呼叫。

在派生類中:初始化的順序

呼叫基類的構造器

按宣告順序呼叫成員的初始化方法

呼叫派生類構造器主體

大多數類的初始化都是按照這些順序結合在一起的。

下面是乙個例子:

public

class

test

extends

sub public

static

void

main(string args)

public

static

intgetfield2()

}class super

public

int field = 0;

public

static

int field2 = getfield2();

public

void

fun1()

public

intgetfield()

public

static

void

fun2()

public

static

intgetfield2()

}class sub extends super

public

int field = getfield();

public

static

int field2 = getfield2();

public

void

fun1()

public

intgetfield()

public

static

void

fun2()

public

static

intgetfield2()

}

下面我們看看輸出的結果:

output:

super static fun2

substatic fun2

test static

super()

sub fun1

sub()

test()

我們在main()方法中呼叫了new乙個test的物件,由於test繼承了sub,而sub繼承了super。(當進行繼承時,我們已經知道基類的一切,並且可以訪問基類中任何宣告為public和protected的成員。這意味著在派生類中,必須假定基類的所有成員都是有效的。一種標準方法是,構造動作一經發生,那麼物件所有部分的全體成員都會得到構建。然而,在構造器內部,我們必須確保所要使用的成員都已經構建完畢。為確保這一目的,唯一的辦法就是首先呼叫基類的構造器。那麼在進入派生類構造器時,在基類中可供我們訪問的成員都已得到初始化。)

只要程式載入了類的位元組碼,不用建立任何例項物件,靜態變數就會被分配空間,靜態變數就可以被使用了。

所以static變數是最先初始化的,並根據基類到派生類的順序。

當static變數初始化之後,下乙個執行的就是基類super的例項變數,然後在輪到super的構造器。

接著就是sub的例項變數和構造器。我們可以看到sub的構造器執行之前有sub fun1的輸出。這就證明是先初始化例項變數再執行構造器的。

當基類都初始化完成時,在輪到派生類。

例項變數屬於某個物件的屬性,必須建立了例項物件,其中的例項變數才會被分配空間,才能使用這個例項變數。而靜態變數不屬於某個例項物件,而是屬於類,所以也稱為類變數,只要程式載入了類的位元組碼,不用建立任何例項物件,靜態變數就會被分配空間,靜態變數就可以被使用了。總之,例項變數必須建立物件後才可以通過這個物件來使用,靜態變數則可以直接使用類名來引用。

也就是說例項變數在每個物件的建立都會初始化,而靜態變數只會在第一次載入類時初始化(只會初始化一次)。

下面是乙個例子:

public

class explicitstatic

static cups cup1 = new cups();

static cups cup2 = new cups();

}class cup

void f(int marker)

}class cups

cups()

public

intgetfield()

}

output:

cup(1)

cup(2)

field

cups()

field

cups()

inside

main()

f(99)

成功構建 (總時間: 1 秒)

根據上面所說的順序,相信大家都會看得懂的。

類成員初始化

一 預設呼叫的無參建構函式 include include using namespace std class studentid class student int main 8 91011class student 20 2122 intmain 執行結果 重新設計建構函式,對s物件進行初始化,...

初始化C 類成員

問題 我的問題是關於初始化c 類成員的。我見過許多這樣的 包括在你的欄目中也見到過 csomeclass csomeclass x 0 y 1 而在別的什麼地方則寫成下面的樣子 csomeclass csomeclass x 0 y 1 我的一些程式設計師朋友說第二種方法比較好,但他們都不知道為什麼...

類的成員初始化

類的每個基本型別資料成員都有乙個初始值 類中定義乙個物件引用時,如果不初始化,此引用會獲得乙個特殊值 null。如下 public class initialvalues public static void main string args output data type initial val...