av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

Java類初始化時機測試方法解析

瀏覽:61日期:2022-08-27 11:19:22

<clinit>()方法

Java 類加載的初始化過程中,編譯器按語句在源文件中出現(xiàn)的順序,依次自動收集類中的所有類變量的賦值動作和靜態(tài)代碼塊中的語句合并產(chǎn)生方法。 如果類中沒有靜態(tài)語句和靜態(tài)代碼塊,那可以不生成<clinit>() 方法。

并且 <clinit>() 不需要顯式調(diào)用父類(接口除外,接口不需要調(diào)用父接口的初始化方法,只有使用到父接口中的靜態(tài)變量時才需要調(diào)用)的初始化方法 <clinit>(),虛擬機會保證在子類的 <clinit>() 方法執(zhí)行之前,父類的 <clinit>() 方法已經(jīng)執(zhí)行完畢(所以java.lang.Object 類總是第一個被加載)

Java類初始化時機測試方法解析

準(zhǔn)備父類和子類

class Father { static int father_a = 1; static { System.out.println('父類靜態(tài)代碼塊執(zhí)行'); } static class StaticInnerClass { static { System.out.println('靜態(tài)內(nèi)部類靜態(tài)代碼塊執(zhí)行'); } }}class Son extends Father { static { System.out.println('子類靜態(tài)代碼塊執(zhí)行'); son_a = 300; } static int son_a = 100; static final int M = 1;}

Main方法:

1:父類沒有被引用但是會被先加載

new Son();

Java類初始化時機測試方法解析

2:反射也會產(chǎn)生主動引用:

Class a = Class.forName('clinit.Son');

(運行結(jié)果同1)

3:子類使用父類靜態(tài)變量或方法不會產(chǎn)生類的引用

System.out.println('Father.a = ' + Son.father_a);

Java類初始化時機測試方法解析

4:通過類創(chuàng)建數(shù)組不會加載類(只是開辟一塊空間)

Son[] sons = new Son[8];

Java類初始化時機測試方法解析

5:使用常量不會加載父類和之類(常量在Linking階段就保存在常量池當(dāng)中了)

System.out.println('Son.CONST = ' + Son.CONST);

Java類初始化時機測試方法解析

6:引用靜態(tài)內(nèi)部類不會加載外部類(應(yīng)用于單例模式)

new Father.StaticInnerClass();

Java類初始化時機測試方法解析

代碼總結(jié):

public static void main(String[] args) throws Exception {// 1.父類沒有被引用但是會被先加載// new Son();// 2.反射會產(chǎn)生主動引用// Class a = Class.forName('clinit.Son');// 3.子類使用父類靜態(tài)變量或方法不會產(chǎn)生類的引用// System.out.println('Father.a = ' + Son.father_a);// 4.通過類創(chuàng)建數(shù)組不會加載類(只是開辟一塊空間)// Son[] sons = new Son[8];// 5.使用常量不會加載父類和之類(常量在Linking階段就保存在常量池當(dāng)中了)// System.out.println('Son.CONST = ' + Son.CONST);// 6.引用靜態(tài)內(nèi)部類不會加載外部類(應(yīng)用于單例模式)// new Son.StaticInnerClass(); }}

PS:由于是按出現(xiàn)的順序執(zhí)行的,為了避免不必要的麻煩,應(yīng)盡量把靜態(tài)變量寫在靜態(tài)代碼塊之前

public class Test { public static void main(String[] args) { System.out.println('a = ' + cls.a); }}class cls { static int a = 10;8 static { a = 20; }9 }

Java類初始化時機測試方法解析

如果 調(diào)換順序輸出結(jié)果將是 a = 10

class cls { static { a = 20; } static int a = 10; }

Java類初始化時機測試方法解析

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 日韩精品一区在线 | 欧美日韩中文字幕在线 | 免费一级大片 | 午夜影院普通用户体验区 | 中文字幕高清免费日韩视频在线 | 99re国产精品 | 免费国产黄网站在线观看视频 | 国产成人区 | 范冰冰一级做a爰片久久毛片 | 国产精品久久久久一区二区三区 | 欧美午夜一区 | h视频免费观看 | 日韩欧美一区二区三区免费观看 | 91在线视频播放 | 一区二区三区视频在线免费观看 | 日韩欧美二区 | 久久久国产一区 | 欧美一级二级三级视频 | 欧美精品一区二区三区四区 在线 | 亚洲日韩中文字幕一区 | 久久新| 91精品久久久久久久 | 久久精品视频网站 | 精品视频一区二区三区在线观看 | 国产亚洲网站 | 成人在线视频免费观看 | 一区二区中文字幕 | 亚洲 欧美 另类 日韩 | 在线播放中文 | 久久国产精品91 | 蜜桃视频在线观看免费视频网站www | 久久视频一区 | 国产精品免费一区二区三区四区 | 日韩久久综合网 | 国产精品毛片一区二区三区 | av网站免费观看 | 国产精品欧美一区喷水 | 成人婷婷 | 毛片a区 | 国产欧美精品一区二区三区 | 羞羞视频免费观看 |