Jdk1.7之前:
Jdk1.7后期开始:
查看class文件常量池:
代码:
public class Test {
static int i=10;
static String str="hello";
public static void main(String[] args){
System.out.println(str);
}
}
指令及结果:
PS C:\Users\lbw\Desktop\云主机> javac Test.java
PS C:\Users\lbw\Desktop\云主机> javap -v Test
Classfile /C:/Users/lbw/Desktop/云主机/Test.class
Last modified 2019-1-7; size 543 bytes
MD5 checksum 26b9ad5e7727987890f74c30228abc27
Compiled from "Test.java"
public class Test
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #8.#22 // java/lang/Object."<init>":()V
#2 = Fieldref #23.#24 // java/lang/System.out:Ljava/io/PrintStream;
#3 = Fieldref #7.#25 // Test.str:Ljava/lang/String;
#4 = Methodref #26.#27 // java/io/PrintStream.println:(Ljava/lang/String;)V
#5 = Fieldref #7.#28 // Test.i:I
#6 = String #29 // hello
#7 = Class #30 // Test
#8 = Class #31 // java/lang/Object
#9 = Utf8 i
#10 = Utf8 I
#11 = Utf8 str
#12 = Utf8 Ljava/lang/String;
#13 = Utf8 <init>
#14 = Utf8 ()V
#15 = Utf8 Code
#16 = Utf8 LineNumberTable
#17 = Utf8 main
#18 = Utf8 ([Ljava/lang/String;)V
#19 = Utf8 <clinit>
#20 = Utf8 SourceFile
#21 = Utf8 Test.java
#22 = NameAndType #13:#14 // "<init>":()V
#23 = Class #32 // java/lang/System
#24 = NameAndType #33:#34 // out:Ljava/io/PrintStream;
#25 = NameAndType #11:#12 // str:Ljava/lang/String;
#26 = Class #35 // java/io/PrintStream
#27 = NameAndType #36:#37 // println:(Ljava/lang/String;)V
#28 = NameAndType #9:#10 // i:I
#29 = Utf8 hello
#30 = Utf8 Test
#31 = Utf8 java/lang/Object
#32 = Utf8 java/lang/System
#33 = Utf8 out
#34 = Utf8 Ljava/io/PrintStream;
#35 = Utf8 java/io/PrintStream
#36 = Utf8 println
#37 = Utf8 (Ljava/lang/String;)V
{
static int i;
descriptor: I
flags: ACC_STATIC
static java.lang.String str;
descriptor: Ljava/lang/String;
flags: ACC_STATIC
public Test();
descriptor: ()V
flags: ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 1: 0
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=1, args_size=1
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: getstatic #3 // Field str:Ljava/lang/String;
6: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
9: return
LineNumberTable:
line 5: 0
line 6: 9
static {};
descriptor: ()V
flags: ACC_STATIC
Code:
stack=1, locals=0, args_size=0
0: bipush 10
2: putstatic #5 // Field i:I
5: ldc #6 // String hello
7: putstatic #3 // Field str:Ljava/lang/String;
10: return
LineNumberTable:
line 2: 0
line 3: 5
}
SourceFile: "Test.java"
详细了解:https://blog.csdn.net/qq_26222859/article/details/73135660