日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 记录一个类加载顺序的坑

發布時間:2024/7/23 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 记录一个类加载顺序的坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看看這個,先想想結果打印的順序和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

原因:

就是先靜態初始化本類實例,那么后面的靜態初始化都會等到這個實例化完成才會執行。
詳細過程是這樣的:
1、調用main方法,觸發類的靜態初始化
2、第一個靜態變量是ClassLoderTest類本身,于是就執行new ClassLoderTest()初始化
3、由于這個沒執行完,后面的靜態代碼塊和靜態變量就先等等
4、既然是類的初始化,那就先執行普通代碼塊,打印出2
5、再初始化成員變量,a=11,但b因為是靜態變量,并沒有賦值,所以這時b=0
6、再執行構造方法,打印出3,a=11,b=0,此時類初始化完成
7、這時才執行后面的靜態初始化,于是執行到靜態代碼塊,打印出1
8、再初始化靜態變量b,此時b=12
9、所有初始化都完成,最后再調用main方法中的靜態方法,打印出4

總結

以上是生活随笔為你收集整理的java 记录一个类加载顺序的坑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。