物件導向 類 類 例項初始化)

2021-10-07 23:14:45 字數 3980 閱讀 7988

1、類的成員:

public

class

testblock

}class

myclass

}

結果為:

這是非靜態**塊

無參構造

在每次建立物件時都執行

public

class

testblock

}class

myclass

public

myclass

(string str)

}

結果為:

這是非靜態**塊

無參構造

這是非靜態**塊

有參構造

3、例項初始化過程:建立物件時,為物件進行初始化的操作

public

class

testblock

}class

demo

private string str=

assign()

;public

demo()

public

demo

(string str)

public string assign()

}

結果為:

這是非靜態**塊1

assign方法

這是非靜態**塊2

無參構造

這是非靜態**塊1

assign方法

這是非靜態**塊2

有參構造

構造器練習01

public

class

testinit

}class

father

}class

sonextends

father

public

son(string str)

public

son(string str,

int num)

}

練習02

/*

* 先執行父類的例項初始化方法

*/public

class

testinnit2

}class

fupublicfu(

)}class

ziextends

fupubliczi(

)}

結果為:

1、父類的非靜態**塊

2、這是父類的無參構造

3、子類的非靜態態**塊

4、這是子類的無參構造

練習03

public

class

testinnit2

}class

fupublicfu(

)public string assignfu()

}class

ziextends

fupubliczi(

)public string assignzi()

}

結果為:

3、父類的assign方法

1、父類的非靜態**塊

2、這是父類的無參構造

6、子類的assign方法

4、子類的非靜態態**塊

5、這是子類的無參構造

(若子類和父類的方法名相同,則輸出的都是子類的assign方法)

在init中隱含了str=this.assign(),在構造器中,在例項初始化方法中代表的是正在建立的物件,現在建立的是子類的物件,因為子類重寫了assign方法,那麼執行的是子類重寫的assign方法

類的初始化

package demo;

/* * (1)類的初始化

* ()

* * (2)執行main方法

* system.out.println("x="+x); //靜態變數 x=-1

* z--; //靜態變數 z=-1

* method();

* y=z++ + ++z; //靜態變數 z++=-1 z=0,++z=1 z=1 y=-1+1=0

* system.out.println("result:"+(z+y+ ++z)); //靜態變數 z=1,y=0,++z=2 z=2 ->result=3

*/public

class

test07

static

public

static

void

main

(string[

] args)

public

static

void

method()

}

分析:

(1)類的初始化 */

結果為:

x=-1

result:=3

例項初始化

1、子類重寫父類的方法

package demo;

/* * 例項初始化

*1、 base b1 = new base(); //父類的例項初始化,與子類無關

* ()

* 2、base b2 = new sub();

* (1)父類的例項初始化

* ()

* (1)子類的例項初始化

* ()

*/public

class

test08

}class

base

public

void

method

(int i)

}class

subextends

base

public

void

method

(int j)

}

分析:

例項初始化

*1、 base b1 = new base(); //父類的例項初始化,與子類無關

結果為:

base:100

sub:100

base:70

若子類沒有重寫父類的方法,則結果為:

base:100

base:100

base:70

package demo;

/* * 例項初始化的過程:

* (1)父類的例項初始化

* ()

* (1)子類的例項初始化

* (string name)

*

* }*/public

class

test09

}class

people

public

people

(string name)

}class

child

extends

people

public

child()

}

結果為:132

package demo;

/* * new a(new b());

* (1)new b()

* ()

* * (2)new a(b的物件)

* (b b)

*/public

class

test10

}class

apublic

a(b b)

}class

b}

結果為:ba

ab

類初始化和例項初始化

乙個類要建立例項需要先載入並初始化該類 main方法所在的類需要先載入和初始化 乙個子類要初始化需要先初始化父類 乙個類初始化就是執行clinit 方法 clinit 方法由靜態類變數顯式賦值 和靜態 塊組成 類變數顯式賦值 和靜態 塊 從上到下順序執行 clinit 方法只執行一次 父類的初始化 ...

類初始化和例項初始化

father public class father father public inttest public static intmethod son public class sonextends father son public inttest public static intmethod...

初始化類物件

初始化類物件 趙湘寧問題 c 中如何初始化類中的表資料?在c語言中,我能像下面這樣初始化結構陣列 struct mystruct mystruct table etc 但是如果mystruct是個c 類,而不是結構,我編譯就會出錯。我覺得這是c 的乙個不足。解答 這個問題完全取決於你如何看待c c ...