編譯期常量運(yùn)行期常量

所屬文集:ClassLoader串燒


編譯期常量

在編譯階段姓言,常量就被放到使用這個(gè)常量的方法的所在的類的常量池中
調(diào)用類瞬项,并沒有直接引用到定義常量的類,因此不會(huì)觸發(fā)定義常量的類 的初始化何荚。
因此兩者沒有了關(guān)聯(lián)囱淋,刪除定義常量的類的.class文件也不影響。
如:i'm strChild會(huì)被放到Test06的常量池中餐塘。

摘自https://www.cnblogs.com/grefr/p/6094871.html
以Java為例绎橘,static final int a = 1將是一個(gè)編譯時(shí)常量,編譯后的符號(hào)表中將找不到a唠倦,所有對a的引用都被替換成了1
對于這句話称鳞,要確認(rèn)如何查看符號(hào)表,怎么識(shí)別變成了1

案例1:

public class Test06 {
    public static void main(String[] args) {
        System.out.println(MyChild.strChild);
        //只輸出:i'm strChild
        //System.out.println(MyParent.strParent);
        //只輸出:i'm parent
    }
}
class MyChild extends MyParent {
    public static final String strChild = "i'm strChild";
    static {
        System.out.println("this is MyChild static...");
    }
}
class MyParent {
    public static final String strParent ="i'm parent";
    static {
        System.out.println("this is MyParent static");
    }
}

image.png

ldc命令參考

四稠鼻、ldc系列
該系列命令負(fù)責(zé)把數(shù)值常量或String常量值從常量池中推送至棧頂冈止。該命令后面需要給一個(gè)表示常量在常量池中位置(編號(hào))的參數(shù),
哪些常量是放在常量池呢候齿?比如:final static int id=32768;final static float double=6.5熙暴。
對于const系列命令和push系列命令操作范圍之外的數(shù)值類型常量,都放在常量池中.
另外慌盯,所有不是通過new創(chuàng)建的String都是放在常量池中的周霉。
指令碼 助記符 說明
0x12 ldc 將int, float或String型常量值從常量池中推送至棧頂
0x13 ldc_w 將int, float或String型常量值從常量池中推送至棧頂(寬索引)
0x14 ldc2_w 將long或double型常量值從常量池中推送至棧頂(寬索引)


運(yùn)行期常量

public class Test07 {
    public static void main(String[] args) {
        System.out.println(MyParent07.a);
        System.out.println(MyParent07.str);
        System.out.println(MyParent07.str);
    }
}
class MyParent07{
    public static final String str = UUID.randomUUID().toString();
    public static final int a = 10;
    static {
        System.out.println("MyParent07 static executed");
    }
}

查看輸出

[Loaded sun.nio.cs.US_ASCII$Decoder from C:\Program Files\Java\jdk1.8.0_144\jre\lib\rt.jar]
10//先輸出了10,之后才加載了MyParent07這個(gè)類
[Loaded MyParent07 from file:/C:/Users/rock/IdeaProjects/jvm-learn-07/jvmlearn07/target/classes/]
[Loaded java.util.UUID from C:\Program Files\Java\jdk1.8.0_144\jre\lib\rt.jar]
[Loaded java.util.UUID$Holder from C:\Program Files\Java\jdk1.8.0_144\jre\lib\rt.jar]
...
n多類加載信息忽略
...
MyParent07 static executed//靜態(tài)代碼塊執(zhí)行亚皂,只有首次加載才執(zhí)行初始化
19019819-1961-4e92-8816-8d2dab9df34c//輸出結(jié)果
19019819-1961-4e92-8816-8d2dab9df34c//輸出結(jié)果
[Loaded java.lang.Shutdown from C:\Program Files\Java\jdk1.8.0_144\jre\lib\rt.jar]
[Loaded java.lang.Shutdown$Lock from C:\Program Files\Java\jdk1.8.0_144\jre\lib\rt.jar]

Process finished with exit code 0

MyParent07.str是運(yùn)行期常量俱箱;
不在調(diào)用者所在類的常量池中;
System.out.println(MyParent07.str);這樣的調(diào)用就是對MyParent07的主動(dòng)調(diào)用灭必,會(huì)引起類的初始化(初始化之前肯定要先加載)狞谱;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乃摹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子跟衅,更是在濱河造成了極大的恐慌孵睬,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伶跷,死亡現(xiàn)場離奇詭異掰读,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)叭莫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門蹈集,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人食寡,你說我怎么就攤上這事雾狈。” “怎么了抵皱?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵善榛,是天一觀的道長。 經(jīng)常有香客問我呻畸,道長移盆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任伤为,我火速辦了婚禮咒循,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绞愚。我一直安慰自己叙甸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布位衩。 她就那樣靜靜地躺著裆蒸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪糖驴。 梳的紋絲不亂的頭發(fā)上僚祷,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機(jī)與錄音贮缕,去河邊找鬼辙谜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛感昼,可吹牛的內(nèi)容都是我干的装哆。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼烂琴!你這毒婦竟也來了爹殊?” 一聲冷哼從身側(cè)響起蜕乡,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤奸绷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后层玲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體号醉,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年辛块,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了畔派。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,861評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡润绵,死狀恐怖线椰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尘盼,我是刑警寧澤憨愉,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站卿捎,受9級特大地震影響配紫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜午阵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一躺孝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧底桂,春花似錦植袍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至猫十,卻和暖如春览濒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拖云。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工贷笛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宙项。 一個(gè)月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓乏苦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子汇荐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Java byte code 的學(xué)習(xí)意義 為啥要學(xué)java bytecode洞就,這就跟你問我已經(jīng)會(huì)python了為...
    shanggl閱讀 1,670評論 0 3
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法掀淘,內(nèi)部類的語法旬蟋,繼承相關(guān)的語法,異常的語法革娄,線程的語...
    子非魚_t_閱讀 31,665評論 18 399
  • 從三月份找實(shí)習(xí)到現(xiàn)在倾贰,面了一些公司,掛了不少拦惋,但最終還是拿到小米匆浙、百度、阿里厕妖、京東首尼、新浪、CVTE言秸、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,278評論 11 349
  • ——工作站小伙伴的樂陽小學(xué)之行 5.10 软能,按計(jì)劃應(yīng)該是去菊的學(xué)校——樂至縣樂陽小學(xué)井仰。 早上埋嵌,五點(diǎn)...
    2016小魚的夢閱讀 302評論 0 1
  • (當(dāng)下)此刻就是支持我成長的最大機(jī)會(huì) (過程)深呼吸一,二俱恶,三雹嗦,我看見了我的情緒和想法,這不過是情緒和想法而已合是,我...
    藍(lán)藍(lán)的天沈燕芬閱讀 192評論 0 2