第98章

小A:“在使用構造器中的要注意哪些事項?”

大B:“1、構造器中一定不要創建自身的實例,否則會造成調用棧溢出錯誤。這個規則也適用於對象的實例變量,如果對象中有自身的引用,這個引用一定不能在定義中或者構造器中初始化。”

classa

{

aa=newa();

publica()

{

a=newa();

ab=newa();

}

}

大B:“以上三種情況都會造成棧溢出,這樣會造成一個無窮遞歸的調用棧。2、如果父類是一個抽象類,那通過調用父類的構造器,也可以將它初始化,並且初始化其中的數據。3、如果你要在構造器中調用一個方法時,將該方法聲明爲private。對於這個規則是需要一些說明的,假使你的父類構造器中要調用一個非靜態方法,而這個方法不是private的又被子類所重載,這樣在實際創建子類的過程中遞歸調用到了父類的構造器時,父類構造器對這個方法的調用就會由於多態而實際上調用了子類的方法,當這個子類方法需要用到子類中實例變量的時候,就會由於變量沒有初始化而出現異常(至於爲什麼子類中的實例變量沒有初始化可以參考上邊的實例初始化過程),這是Java不想看到的情況。而當父類構造器中調用的方法是一個private方法時,多態就不會出現,也就不會出現父類構造器調用子類方法的情況,這樣可以保證父類始終調用自己的方法,即使這個方法中調用了父類中的實例變量也不會出現變量未初始化的情況(變量初始化總是在當前類構造器主體執行之前進行)。”

第7章第149章第169章第162章第217章第77章第24章第135章第101章第99章第186章第36章第212章第48章第133章第27章第138章第126章第165章第61章第111章第74章第189章第109章第97章第39章第212章第86章第77章第208章第79章第17章第142章第72章第160章第219章第169章第129章第24章第79章第203章第23章第199章第56章第220章第70章第51章第48章第31章第98章第79章第77章第73章第28章第168章第42章第94章第2章第32章第72章第98章第94章第188章第42章第164章第212章第75章第94章第76章第76章第49章第33章第94章第140章第104章第6章第99章第199章第11章第113章第195章第209章第162章第171章第22章第151章第18章第175章第6章第151章第43章第57章第203章第21章第94章第100章第68章第160章第95章第168章
第7章第149章第169章第162章第217章第77章第24章第135章第101章第99章第186章第36章第212章第48章第133章第27章第138章第126章第165章第61章第111章第74章第189章第109章第97章第39章第212章第86章第77章第208章第79章第17章第142章第72章第160章第219章第169章第129章第24章第79章第203章第23章第199章第56章第220章第70章第51章第48章第31章第98章第79章第77章第73章第28章第168章第42章第94章第2章第32章第72章第98章第94章第188章第42章第164章第212章第75章第94章第76章第76章第49章第33章第94章第140章第104章第6章第99章第199章第11章第113章第195章第209章第162章第171章第22章第151章第18章第175章第6章第151章第43章第57章第203章第21章第94章第100章第68章第160章第95章第168章