先說執(zhí)行順序:我們在new一個對象時,如果類還沒加載,就需要先將類加載到內(nèi)存,此時就會執(zhí)行靜態(tài)代碼塊,在創(chuàng)建對象時,是先執(zhí)行代碼塊,然后執(zhí)行構(gòu)造器。所以靜態(tài)代碼塊、代碼塊、構(gòu)造器的執(zhí)行順序是:靜態(tài)代碼塊→代碼塊→構(gòu)造器。
創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的宜都網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
再說作用:靜態(tài)代碼塊是用于初始化類的(在加載類時執(zhí)行,只執(zhí)行一次),代碼塊是用于初始化對象的(在創(chuàng)建對象時執(zhí)行,每次創(chuàng)建對象時都執(zhí)行),構(gòu)造器是用于創(chuàng)建對象的。
static代碼塊是在類初始化時就被虛擬機執(zhí)行的,所以最先輸出的是d。
main方法是靜態(tài)方法,是在類加載完之后由虛擬機調(diào)用的,調(diào)用之后才會輸出c1。
一般情況下,如果有些代碼必須在項目啟動的時候就執(zhí)行的時候,需要使用靜態(tài)代碼塊,這種代碼是主動執(zhí)行的;
嗯,是的,靜態(tài)代碼塊只會加載一次,因為在類加載器進行類加載的時候就已經(jīng)把它放到內(nèi)存中了??慈缦麓a:
public?class?StaticDemo?{
static{
System.out.println("Top");
}
public?static?void?main(String[]?args)?{//遲于static塊
System.out.println("main方法");
}
static{?//直接加載?優(yōu)先于main方法
System.out.println("Bottom");
}
}
上面這段代碼將會依次輸出:Top、Bottom、main方法