jvm四:常量的本质含义以及助记符基本认识
生活随笔
收集整理的這篇文章主要介紹了
jvm四:常量的本质含义以及助记符基本认识
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
package com.atChina.jvm;
/*
* 常量在編譯階段會存入到調用這個常量的方法所在的類的常量池中,
* 本質上,調用類并沒有直接引用到定義常量的類,因此并不會觸發
* 定義常量的類的初始化, 因此也就不會執行靜態代碼塊的代碼
*
* 如下代碼: 常量f="劉備",存放到了Test2的常量池中,之后Test2與Father2就沒有任何關系了
* 甚至,我們可以刪除Father2的class文件
*
* bipush表示將單字節(-128至127)的常量值推送至棧頂
* sipush表示將一個短整形常量值(-32768至32767)推送至棧頂
* iconst_1 表示將int類型1推送至棧頂( iconst_0至iconst_5分表表示整形0至5)
*/
public class Test2 {public static void main(String[] args) {System.out.println(Father2.f);System.out.println(Father2.s);System.out.println(Father2.i);System.out.println(Father2.ii);System.out.println(Father2.iii);}
}class Father2{public static final String f = "劉備";// 被final修飾了,所以f是一個常量public static final short s = 127;public static final int i = 32767;public static final int ii = 1;public static final int iii = 5;static{System.out.println("桃園結義");}
}
通過javap -c 類路徑.類名 就可以反編譯class文件
? ?ldc助記符:
? ? ? ? ? 表示將int,float或是String類型的常量值從常量池中推送至棧頂
? ?bipush助記符:
表示將單字節(-128至127)的常量值推送至棧頂? ?sipush助記符:
? ? ? ? ? ? ?表示將一個短整形常量值(-32768至32767)推送至棧頂
? ??iconst_1助記符:
? ? ? ? ? ? ? iconst_1 表示將int類型1推送至棧頂( iconst_0至iconst_5分表表示整形0至5)
javap -c com.atChina.jvm.Test2 Compiled from "Test2.java" public class com.atChina.jvm.Test2 extends java.lang.Object{ public com.atChina.jvm.Test2();Code:0: aload_01: invokespecial #1; //Method java/lang/Object."<init>":()V4: returnpublic static void main(java.lang.String[]);Code:0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;3: ldc #4; //String 劉備5: invokevirtual #5; //Method java/io/PrintStream.println:(Ljava/lang/String;)V8: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;11: bipush 12713: invokevirtual #6; //Method java/io/PrintStream.println:(I)V16: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;19: sipush 3276722: invokevirtual #6; //Method java/io/PrintStream.println:(I)V25: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;28: iconst_129: invokevirtual #6; //Method java/io/PrintStream.println:(I)V32: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;35: iconst_536: invokevirtual #6; //Method java/io/PrintStream.println:(I)V39: return}?
?
?
總結
以上是生活随笔為你收集整理的jvm四:常量的本质含义以及助记符基本认识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jvm三:jvm参数
- 下一篇: jvm五:编译期不能确定常量的值