在Java中盡量不要在構(gòu)造器里調(diào)用可能被重載的虛方法。
因?yàn)闃?gòu)造器的初始化順序大概是
父類靜態(tài)塊---->子類靜態(tài)塊----> 父類初始化語(yǔ)句---->父類構(gòu)造函數(shù)---->子類初始化語(yǔ)句---->子類構(gòu)造器。
如果父類構(gòu)造器執(zhí)行的時(shí)候,調(diào)用了子類的重載方法,如果重載方法中引用了子類的類字段,然而子類的類字段還在剛初始化的階段,剛完成內(nèi)存布局,可能為null的。這種調(diào)用方法是極度危險(xiǎn)的。