国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

Java類加載順序

2019-11-06 06:11:10
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

例1:

public class StaticTest { public static int k = 0; public static StaticTest t1 = new StaticTest("t1"); public static StaticTest t2 = new StaticTest("t2"); public static int i = 結(jié)果: 1:j i=0 n=0 2:構(gòu)造快 i=1 n=1 3:靜態(tài)塊 i=2 n=2 4:t1 i=3 n=3 5:j i=4 n=4 6:構(gòu)造快 i=5 n=5 7:靜態(tài)塊 i=6 n=6 8:t2 i=7 n=7 9:i i=8 n=8 10:j i=9 n=99 11:構(gòu)造快 i=10 n=100 12:靜態(tài)塊 i=11 n=101 13:init i=12 n=102

類加載順序: * 1.加載類的靜態(tài)屬性(非靜態(tài)不管) * 這里加載的是:public static int k = 0; * 然后加載:public static StaticTest t1 = new StaticTest(“t1”); * 因?yàn)榇颂庍M(jìn)行了類的實(shí)例化所以 * 1.1加載類的非靜態(tài)屬性 * 這里是:public int j = print(“j”); * 運(yùn)行完這個(gè)方法接著 * 1.2順序加載類中的非static代碼塊(static暫時(shí)不加載) * 這里是:print(“構(gòu)造快”);和print(“靜態(tài)塊”); * 運(yùn)行完接著 * 1.3加載類的構(gòu)造方法 * 這里是:public StaticTest(String str) * 運(yùn)行完(一個(gè)靜態(tài)屬性的實(shí)例就完成了) * 2.繼續(xù)加載類的靜態(tài)屬性 * 這里加載的是:public static StaticTest t2 = new StaticTest(“t2”); * 2.1重復(fù)(1.1-1.3) * 3.繼續(xù)加載類的靜態(tài)屬性 * 這里加載的是:public static int i = print(“i”); * 運(yùn)行完接著 * 4.繼續(xù)加載類的靜態(tài)屬性 * 這里加載的是:public static int n = 99; * 不管你n原來(lái)是多少現(xiàn)在為99 * 接著 * 5.(如果有static代碼塊,在這里先加載,這個(gè)里面沒(méi)有所以加載主函數(shù))加載主函數(shù) * 這里加載的是:StaticTest t = new StaticTest(“init”); * 因?yàn)榇颂庍M(jìn)行了類的實(shí)例化所以 * 5.1 * 重復(fù)1.1-1.3 * 5.2 * 因?yàn)閜ublic static int print(String str)這個(gè)方法返回++n * 所以n從99開(kāi)始累 * 運(yùn)行完OK了

例2:

public class test { //1.準(zhǔn)備加載類 public static void main(String[] args) { new test(); } static int num = 4; //2.靜態(tài)變量和靜態(tài)代碼塊的加載順序由編寫先后決定 { num += 3; System.out.println("b"); //4.按照順序加載匿名代碼塊和非靜態(tài)變量 } int a =5; //5.按照順序加載匿名代碼塊和非靜態(tài)變量 { System.out.println("c"); //6.按照順序加載匿名代碼塊和非靜態(tài)變量 } test() { System.out.println("d"); //7.最后加載構(gòu)造函數(shù),完成對(duì)象的建立 } static { //3.靜態(tài)變量和靜態(tài)代碼塊的加載順序由編寫先后決定 System.out.println("a"); } static void run() // 靜態(tài)方法,調(diào)用的時(shí)候才加載// 注意看,e沒(méi)有加載 { System.out.println("e"); }}

一般順序:靜態(tài)塊(靜態(tài)變量)–>成員變量(匿名代碼塊)–>構(gòu)造方法–>靜態(tài)方法(調(diào)用的時(shí)候才加載)

例3:

public class Parent{ public static Print obj1 = new Print("1"); public Print obj2 = new Print("2"); public static Print obj3 = new Print("3"); static{ new Print("4"); } public static Print obj4 = new Print("5"); public Print obj5 = new Print("6"); public Parent(){ new Print("7"); } }public class Child extends Parent{ static{ new Print("a"); } public static Print obj1 = new Print("b"); public Print obj2 = new Print("c"); public Child (){ new Print("d"); } public static Print obj3 = new Print("e"); public Print obj4 = new Print("f"); public static void main(String [] args){ Parent obj1 = new Child (); Parent obj2 = new Child (); } }

執(zhí)行main方法,程序輸出順序?yàn)椋?1 3 4 5 a b e 2 6 7 c f d 2 6 7 c f d

如果有繼承關(guān)系:

如果類還沒(méi)有被加載: 1、先執(zhí)行父類的靜態(tài)代碼塊和靜態(tài)變量初始化,并且靜態(tài)代碼塊和靜態(tài)變量的執(zhí)行順序只跟代碼中出現(xiàn)的順序有關(guān)。 2、執(zhí)行子類的靜態(tài)代碼塊和靜態(tài)變量初始化。 3、執(zhí)行父類的實(shí)例變量初始化 4、執(zhí)行父類的構(gòu)造函數(shù) 5、執(zhí)行子類的實(shí)例變量初始化 6、執(zhí)行子類的構(gòu)造函數(shù)

如果類已經(jīng)被加載: 則靜態(tài)代碼塊和靜態(tài)變量就不用重復(fù)執(zhí)行,再創(chuàng)建類對(duì)象時(shí),只執(zhí)行與實(shí)例相關(guān)的變量初始化和構(gòu)造方法。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 文山县| 西乌| 青神县| 沿河| 都匀市| 酉阳| 扬中市| 西平县| 天峨县| 曲阳县| 贵港市| 琼海市| 乃东县| 阿合奇县| 恩施市| 时尚| 广州市| 建瓯市| 突泉县| 麦盖提县| 莱芜市| 辽宁省| 鹿泉市| 华蓥市| 三江| 龙游县| 稻城县| 伊吾县| 保定市| 孟连| 肥乡县| 昂仁县| 贵州省| 禹城市| 北京市| 溆浦县| 治多县| 奉贤区| 洞口县| 许昌县| 桑植县|