初始化塊執(zhí)行和對(duì)象的關(guān)系
創(chuàng)建對(duì)象是會(huì)執(zhí)行初始化塊嗎,創(chuàng)建對(duì)象過(guò)程不就是執(zhí)行構(gòu)造方法的過(guò)程嗎?和初始化塊有關(guān)系嗎?
創(chuàng)建對(duì)象是會(huì)執(zhí)行初始化塊嗎,創(chuàng)建對(duì)象過(guò)程不就是執(zhí)行構(gòu)造方法的過(guò)程嗎?和初始化塊有關(guān)系嗎?
2017-01-19
舉報(bào)
2017-01-19
????初始化塊并不是創(chuàng)建對(duì)象時(shí)執(zhí)行的,而是第一次用到那個(gè)類(lèi)的時(shí)候執(zhí)行的。
????以上面這個(gè)例子來(lái)說(shuō),程序執(zhí)行main方法中第一句HelloWorld hello = new HelloWorld();的時(shí)候就會(huì)執(zhí)行初始化塊,而且只會(huì)執(zhí)行一次。程序后面又創(chuàng)建了一個(gè)對(duì)象hello2,這個(gè)時(shí)候初始化塊不執(zhí)行,構(gòu)造方法執(zhí)行。只要記住初始化塊是程序第一次調(diào)用類(lèi)的時(shí)候執(zhí)行(且只執(zhí)行一次),而構(gòu)造方法是每創(chuàng)建一個(gè)對(duì)象都會(huì)執(zhí)行一次就行了。
????另外,它們執(zhí)行的順序是:靜態(tài)初始化塊先執(zhí)行,然后非靜態(tài)初始化塊再執(zhí)行,最后構(gòu)造方法執(zhí)行。相同類(lèi)型的初始化塊,按照定義時(shí)的順序執(zhí)行。