java 记录一个类加载顺序的坑
生活随笔
收集整理的這篇文章主要介紹了
java 记录一个类加载顺序的坑
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
看看這個,先想想結(jié)果打印的順序和a、b的值
public class ClassLoderTest {public static void main(String[] args) {staticFun();}static ClassLoderTest clt = new ClassLoderTest();static {System.out.println(1);}{System.out.println(2);}ClassLoderTest(){System.out.println(3);System.out.println("a="+a);System.out.println("b="+b);}public static void staticFun(){System.out.println(4);}int a = 11;static int b = 12; }如果有人想的答案是以打印1開頭,或者b=12的,就都錯了
正確答案:
2 3 a=11 b=0 1 4原因:
就是先靜態(tài)初始化本類實例,那么后面的靜態(tài)初始化都會等到這個實例化完成才會執(zhí)行。
詳細過程是這樣的:
1、調(diào)用main方法,觸發(fā)類的靜態(tài)初始化
2、第一個靜態(tài)變量是ClassLoderTest類本身,于是就執(zhí)行new ClassLoderTest()初始化
3、由于這個沒執(zhí)行完,后面的靜態(tài)代碼塊和靜態(tài)變量就先等等
4、既然是類的初始化,那就先執(zhí)行普通代碼塊,打印出2
5、再初始化成員變量,a=11,但b因為是靜態(tài)變量,并沒有賦值,所以這時b=0
6、再執(zhí)行構(gòu)造方法,打印出3,a=11,b=0,此時類初始化完成
7、這時才執(zhí)行后面的靜態(tài)初始化,于是執(zhí)行到靜態(tài)代碼塊,打印出1
8、再初始化靜態(tài)變量b,此時b=12
9、所有初始化都完成,最后再調(diào)用main方法中的靜態(tài)方法,打印出4
總結(jié)
以上是生活随笔為你收集整理的java 记录一个类加载顺序的坑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CoreAnimation编程指南(六)
- 下一篇: [前台]---js获取input标签中n