麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

Java類加載順序

2019-11-06 06:11:10
字體:
來源:轉載
供稿:網友

例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 = 結果: 1:j i=0 n=0 2:構造快 i=1 n=1 3:靜態塊 i=2 n=2 4:t1 i=3 n=3 5:j i=4 n=4 6:構造快 i=5 n=5 7:靜態塊 i=6 n=6 8:t2 i=7 n=7 9:i i=8 n=8 10:j i=9 n=99 11:構造快 i=10 n=100 12:靜態塊 i=11 n=101 13:init i=12 n=102

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

例2:

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

一般順序:靜態塊(靜態變量)–>成員變量(匿名代碼塊)–>構造方法–>靜態方法(調用的時候才加載)

例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 (); } }

執行main方法,程序輸出順序為: 1 3 4 5 a b e 2 6 7 c f d 2 6 7 c f d

如果有繼承關系:

如果類還沒有被加載: 1、先執行父類的靜態代碼塊和靜態變量初始化,并且靜態代碼塊和靜態變量的執行順序只跟代碼中出現的順序有關。 2、執行子類的靜態代碼塊和靜態變量初始化。 3、執行父類的實例變量初始化 4、執行父類的構造函數 5、執行子類的實例變量初始化 6、執行子類的構造函數

如果類已經被加載: 則靜態代碼塊和靜態變量就不用重復執行,再創建類對象時,只執行與實例相關的變量初始化和構造方法。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄色网址在线免费 | av电影在线观看网站 | 黄色一级片在线观看 | 免费国产羞羞网站视频 | 人人舔人人插 | 5xsq在线视频 | 黄色免费不卡视频 | 性爱在线免费视频 | 国产papa| 成人福利在线播放 | xnxx18日本| 久草在线视频在线 | 在线视频 中文字幕 | 国产乱轮视频 | 国产精品久久久毛片 | 密室逃脱第一季免费观看完整在线 | 亚洲精品a在线观看 | 成年人黄色免费网站 | 亚洲成人入口 | 日本视频在线免费观看 | 国产成人网 | 五月天影院,久久综合, | 亚洲一区成人在线 | 成人444kkkk在线观看 | 亚洲va久久久噜噜噜久牛牛影视 | 亚洲午夜影院在线观看 | 久久精品国产一区二区 | 中国女人内谢8xxxxxx在 | 一级视频网站 | 久久国产精品久久精品国产演员表 | 午夜视频中文字幕 | 一区二区三区日本在线观看 | 暖暖免费观看高清完整版电影 | hdbbwsexvideo | 一级成人毛片 | 国产精品久久久久久久久久久久久久久久 | 在线播放免费人成毛片乱码 | 天天鲁在线视频免费观看 | 9999久久久久久 | 国产91小视频在线观看 | 国产女同疯狂激烈互摸 |