因?yàn)槠胀ǔ蓡T變量相比構(gòu)造方法不管順序優(yōu)先加載
成都創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營銷,提供成都網(wǎng)站制作、做網(wǎng)站、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、小程序開發(fā)、公眾號(hào)商城、等建站開發(fā),成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢。
java 初始化順序:
靜態(tài)成員變量靜態(tài)初始化塊普通成員變量普通的初始化塊構(gòu)造方法(自動(dòng)初始化時(shí)機(jī)在調(diào)用任何方法之前(構(gòu)造方法,成員方法))
在創(chuàng)建新的對象時(shí),也就是new一個(gè)對象時(shí),會(huì)開始初始化這個(gè)對象,在初始化這個(gè)對象時(shí),會(huì)找到對應(yīng)的類,如果類中有static的靜態(tài)方法,靜態(tài)成員變量,普通變量。。。等,會(huì)按照這個(gè)順序執(zhí)行(即按照這個(gè)順序分配內(nèi)容空間,不管他們的位置在哪里,如果是同類型,則按照上下順序執(zhí)行。)
嗯,是的,靜態(tài)代碼塊只會(huì)加載一次,因?yàn)樵陬惣虞d器進(jìn)行類加載的時(shí)候就已經(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");
}
}
上面這段代碼將會(huì)依次輸出:Top、Bottom、main方法
記住 3 條原則:
1、父類優(yōu)先于子類
2、屬性優(yōu)先于代碼塊優(yōu)先于構(gòu)造方法
3、靜態(tài)優(yōu)先于非靜態(tài)
因此,類加載順序?yàn)椋?/p>
父類靜態(tài)變量-父類靜態(tài)語句塊-子類靜態(tài)變量-子類靜態(tài)語句塊-父類普通成員變量-父類動(dòng)態(tài)語句塊-父類構(gòu)造器-子類普通成員變量-子類動(dòng)態(tài)語句塊-子類構(gòu)造器
順序執(zhí)行,就是正常情況下
選擇執(zhí)行(分支),就是用if else...可以使用多次,還有個(gè)switch? case
循環(huán)執(zhí)行,常用的用for循環(huán),while循環(huán),do while循環(huán)
就我理解題意好像就這三種
先說執(zhí)行順序:我們在new一個(gè)對象時(shí),如果類還沒加載,就需要先將類加載到內(nèi)存,此時(shí)就會(huì)執(zhí)行靜態(tài)代碼塊,在創(chuàng)建對象時(shí),是先執(zhí)行代碼塊,然后執(zhí)行構(gòu)造器。所以靜態(tài)代碼塊、代碼塊、構(gòu)造器的執(zhí)行順序是:靜態(tài)代碼塊→代碼塊→構(gòu)造器。
再說作用:靜態(tài)代碼塊是用于初始化類的(在加載類時(shí)執(zhí)行,只執(zhí)行一次),代碼塊是用于初始化對象的(在創(chuàng)建對象時(shí)執(zhí)行,每次創(chuàng)建對象時(shí)都執(zhí)行),構(gòu)造器是用于創(chuàng)建對象的。