色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

Java類(lèi)初始化時(shí)機(jī)測(cè)試方法解析

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

<clinit>()方法

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

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

Java類(lèi)初始化時(shí)機(jī)測(cè)試方法解析

準(zhǔn)備父類(lèi)和子類(lèi)

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

Main方法:

1:父類(lèi)沒(méi)有被引用但是會(huì)被先加載

new Son();

Java類(lèi)初始化時(shí)機(jī)測(cè)試方法解析

2:反射也會(huì)產(chǎn)生主動(dòng)引用:

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

(運(yùn)行結(jié)果同1)

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

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

Java類(lèi)初始化時(shí)機(jī)測(cè)試方法解析

4:通過(guò)類(lèi)創(chuàng)建數(shù)組不會(huì)加載類(lèi)(只是開(kāi)辟一塊空間)

Son[] sons = new Son[8];

Java類(lèi)初始化時(shí)機(jī)測(cè)試方法解析

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

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

Java類(lèi)初始化時(shí)機(jī)測(cè)試方法解析

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

new Father.StaticInnerClass();

Java類(lèi)初始化時(shí)機(jī)測(cè)試方法解析

代碼總結(jié):

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

PS:由于是按出現(xiàn)的順序執(zhí)行的,為了避免不必要的麻煩,應(yīng)盡量把靜態(tài)變量寫(xiě)在靜態(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類(lèi)初始化時(shí)機(jī)測(cè)試方法解析

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

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

Java類(lèi)初始化時(shí)機(jī)測(cè)試方法解析

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

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 成人午夜大片 | 男女猛烈无遮掩免费视频 | 日韩免费黄色片 | 在线观看的毛片 | 国产一国产一有一级毛片 | 欧美成人免费一区在线播放 | 久久婷五月天 | freexxxx性特大另类ww | 给我一个可以看片的www日本 | 99精品这里只有精品高清视频 | 一级黄一片 | 日韩一级精品视频在线观看 | 亚洲综合性 | 欧美大片一级特黄 | 综合在线视频 | 99精品99| 5x社区直接进入一区二区三区 | 色伦网 | 久草视频2 | 成年人网站在线 | 欧美一级免费片 | 久久er热这里只有精品23 | 亚洲激情欧美 | 国产精品久久久久久久久 | 亚洲综合一区二区不卡 | 一区二三区国产 | 欧美国产三级 | 伊人狠狠丁香婷婷综合色 | 男女免费观看在线爽爽爽视频 | 兔子先生节目在线观看免费 | 亚洲男人的天堂久久无 | 国产精品成人网 | 国产日韩亚洲欧美 | 中文字幕亚洲欧美 | 老头老太做爰xxx视频 | 欧美另类 videos黑人极品 | 久久精品一区二区三区日韩 | 久久99国产精品久久99 | 成人 在线播放 | 久草在线免费色站 | 精品久久久久久久九九九精品 |