真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java類的初始化順序是什么

這篇文章主要講解了“Java類的初始化順序是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java類的初始化順序是什么”吧!

成都創(chuàng)新互聯(lián)長期為1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為廣陽企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都網(wǎng)站制作,廣陽網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

Java類的初始化順序

多說無益,以下是本人親自試驗(yàn)的代碼,一目了然:

 1 package test1;
 2 
 3 public class Test {
 4     public static void main(String[] argc) {
 5         new Child();
 6         System.out.println("================================");
 7         new Child();
 8     }
 9 }
10 
11 class Child extends Parent{
12     private static String staticField = getStaticField();
13     static {
14         System.out.println("child靜態(tài)方法塊初始化");
15     }
16     private String field = getField();
17     {
18         System.out.println("child普通方法塊初始化");
19     }
20 
21     public Child() {
22         System.out.println("child構(gòu)造函數(shù)初始化");
23     }
24 
25     public static String getStaticField() {
26         System.out.println("child靜態(tài)屬性初始化");
27         return "staticField";
28     }
29 
30     public static String getField() {
31         System.out.println("child普通屬性初始化");
32         return "field";
33     }
34 }
35 
36 class Parent {
37     private static String staticField = getStaticField();
38     static {
39         System.out.println("parent靜態(tài)方法塊初始化");
40     }
41     private String field = getField();
42     {
43         System.out.println("parent普通方法塊初始化");
44     }
45 
46     public Parent() {
47         System.out.println("parent構(gòu)造函數(shù)初始化");
48     }
49 
50     public static String getStaticField() {
51         System.out.println("parent靜態(tài)屬性初始化");
52         return "staticField";
53     }
54 
55     public static String getField() {
56         System.out.println("parent普通屬性初始化");
57         return "field";
58     }
59 }

打印結(jié)果:

 1 parent靜態(tài)屬性初始化
 2 parent靜態(tài)方法塊初始化
 3 child靜態(tài)屬性初始化
 4 child靜態(tài)方法塊初始化
 5 parent普通屬性初始化
 6 parent普通方法塊初始化
 7 parent構(gòu)造函數(shù)初始化
 8 child普通屬性初始化
 9 child普通方法塊初始化
10 child構(gòu)造函數(shù)初始化
11 ================================
12 parent普通屬性初始化
13 parent普通方法塊初始化
14 parent構(gòu)造函數(shù)初始化
15 child普通屬性初始化
16 child普通方法塊初始化
17 child構(gòu)造函數(shù)初始化

 經(jīng)過替換靜態(tài)屬性和靜態(tài)初始化塊的聲明順序發(fā)現(xiàn)靜態(tài)屬性和靜態(tài)初始化塊的初始化順序和聲明順序有關(guān),同理,普通屬性和普通初始化塊的的初始化順序和聲明順序有關(guān)。

總結(jié):

  1. 當(dāng)某一個(gè)類滿足初始化的條件時(shí)(以后的博客中會(huì)有總結(jié)),先會(huì)初始化父類(從頂級(jí)父類Object依次向下初始化),然后初始化子類;

  2. 初始化該類時(shí),最先初始化靜態(tài)屬性和靜態(tài)初始化塊(和聲明順序有關(guān)),從頂級(jí)父類Object依次向下初始化;

  3. 通過new創(chuàng)建對(duì)象時(shí),先初始化普通屬性和普通初始化塊(和聲明順序有關(guān)),再調(diào)用構(gòu)造方法,同樣從頂級(jí)父類Object依次向下執(zhí)行;

  4. 靜態(tài)屬性和靜態(tài)初始化塊只會(huì)初始化一次,類初始化后,再次通過new創(chuàng)建對(duì)象,只會(huì)重復(fù)執(zhí)行第三步。

接下來引用Java編程思想的一句話:

在類的內(nèi)部,變量定義的先后順序決定了初始化的順序,即使變量定義散布于方法定義之間,它們?nèi)耘f會(huì)在任何方法(包括構(gòu)造器)被調(diào)用之前得到初始化。

感謝各位的閱讀,以上就是“Java類的初始化順序是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Java類的初始化順序是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


當(dāng)前標(biāo)題:Java類的初始化順序是什么
標(biāo)題URL:http://weahome.cn/article/psdodj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部