優(yōu)先關(guān)系表與優(yōu)先函數(shù) 為什么定義了復(fù)制構(gòu)造函數(shù)就必須定義默認(rèn)構(gòu)造函數(shù)?
為什么定義了復(fù)制構(gòu)造函數(shù)就必須定義默認(rèn)構(gòu)造函數(shù)?這個(gè)說法不正確,你在仔細(xì)看看書,如果真是這么寫的,那是不對(duì)的。個(gè)人覺得就是不同的對(duì)象構(gòu)造方法,默認(rèn)構(gòu)造函數(shù)是無參數(shù)構(gòu)造,復(fù)制構(gòu)造函數(shù)使用一個(gè)自身類型的對(duì)
為什么定義了復(fù)制構(gòu)造函數(shù)就必須定義默認(rèn)構(gòu)造函數(shù)?
這個(gè)說法不正確,你在仔細(xì)看看書,如果真是這么寫的,那是不對(duì)的。
個(gè)人覺得就是不同的對(duì)象構(gòu)造方法,默認(rèn)構(gòu)造函數(shù)是無參數(shù)構(gòu)造,復(fù)制構(gòu)造函數(shù)使用一個(gè)自身類型的對(duì)象構(gòu)造
如果說有關(guān)系復(fù)制構(gòu)造函數(shù)需要一個(gè)對(duì)象,這個(gè)對(duì)象可能是使用其他構(gòu)造函數(shù)構(gòu)造的,當(dāng)然可能是默認(rèn)構(gòu)造函數(shù),也可能是其他構(gòu)造函數(shù)
復(fù)制構(gòu)造函數(shù)是構(gòu)造函數(shù)的一個(gè)子集(或者說屬于構(gòu)造函數(shù))?你說的對(duì),復(fù)制構(gòu)造函數(shù)是一個(gè)構(gòu)造函數(shù)。你提供了這個(gè),系統(tǒng)就不會(huì)在提供默認(rèn)構(gòu)造函數(shù)了。
我覺得這句話應(yīng)該這么說,如果一個(gè)類定義了復(fù)制構(gòu)造函數(shù),那么它就應(yīng)該(是應(yīng)該,不是必須)定義一個(gè)其他的構(gòu)造函數(shù)(不一定非要是默認(rèn)的),不定義也是可以的,但是那樣的話,這個(gè)類沒法構(gòu)造對(duì)象,就是無法實(shí)例化了,這樣的類是沒有意義的吧,呵呵。
Java中,構(gòu)造代碼塊和構(gòu)造函數(shù)有什么區(qū)別?
構(gòu)造代碼塊:直接在類中定義且沒有加static關(guān)鍵字的代碼塊稱為{}構(gòu)造代碼塊。構(gòu)造代碼塊在創(chuàng)建對(duì)象時(shí)被調(diào)用,每次創(chuàng)建對(duì)象都會(huì)被調(diào)用,并且構(gòu)造代碼塊的執(zhí)行次序優(yōu)先于類構(gòu)造函數(shù)。
構(gòu)造函數(shù):用于給對(duì)象進(jìn)行初始化,是給與之對(duì)應(yīng)的對(duì)象進(jìn)行初始化,它具有針對(duì)性,函數(shù)中的一種。
特點(diǎn):
1:該函數(shù)的名稱和所在類的名稱相同。
2:不需要定義返回值類型。
3:該函數(shù)沒有具體的返回值。
底層分析:通過反編譯可以看到,構(gòu)造代碼塊中的代碼也是在構(gòu)造方法中執(zhí)行的。在編譯時(shí)的編譯器看來會(huì)默認(rèn)將構(gòu)造代碼塊中的代碼移動(dòng)到構(gòu)造方法中,并且移動(dòng)到構(gòu)造方法內(nèi)容的前面。
構(gòu)造函數(shù)的調(diào)用順序?
繼承關(guān)系的構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行順序?yàn)椋?
1、父類構(gòu)造函數(shù)執(zhí)行。
2、子類構(gòu)造函數(shù)執(zhí)行。
3、子類析構(gòu)函數(shù)執(zhí)行。
4、父類析構(gòu)函數(shù)執(zhí)行。 組合關(guān)系的構(gòu)造函數(shù)和析構(gòu)函數(shù)執(zhí)行順序?yàn)椋?1、執(zhí)行類成員對(duì)象的構(gòu)造函數(shù)。 2、執(zhí)行類自己的構(gòu)造函數(shù)。 3、執(zhí)行類自己的析構(gòu)函數(shù)。 4、執(zhí)行類成員的析構(gòu)函數(shù)。 container有兩個(gè)成員,one,two,所以在執(zhí)行這個(gè)container構(gòu)造函數(shù)之前執(zhí)行object類的構(gòu)造函數(shù)兩次。