Classfile /E:/LXH/projects/java/SETest/src/Test.class
Last modified 2011-11-30; size 454 bytes
MD5 checksum aff926c29617fe449d0cc808330044ad
Compiled from "Test.java"
public class Test
SourceFile: "Test.java"
minor version: 0
major version: 51
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #6.#17 // java/lang/Object."
#2 = Fieldref #18.#19 // java/lang/System.out:Ljava/io/Prin
tStream;
#3 = String #20 // Hello World
#4 = Methodref #21.#22 // java/io/PrintStream.println:(Ljava
/lang/String;)V
#5 = Class #23 // Test
#6 = Class #24 // java/lang/Object
#7 = Utf8 sb
#8 = Utf8 Ljava/lang/StringBuilder;
#9 = Utf8
#10 = Utf8 ()V
#11 = Utf8 Code
#12 = Utf8 LineNumberTable
#13 = Utf8 main
#14 = Utf8 ([Ljava/lang/String;)V
#15 = Utf8 SourceFile
#16 = Utf8 Test.java
#17 = NameAndType #9:#10 // "
#18 = Class #25 // java/lang/System
#19 = NameAndType #26:#27 // out:Ljava/io/PrintStream;
#20 = Utf8 Hello World
#21 = Class #28 // java/io/PrintStream
#22 = NameAndType #29:#30 // println:(Ljava/lang/String;)V
#23 = Utf8 Test
#24 = Utf8 java/lang/Object
#25 = Utf8 java/lang/System
#26 = Utf8 out
#27 = Utf8 Ljava/io/PrintStream;
#28 = Utf8 java/io/PrintStream
#29 = Utf8 println
#30 = Utf8 (Ljava/lang/String;)V
{
public java.lang.StringBuilder sb;
flags: ACC_PUBLIC
public Test();
flags: ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."
":()V
4: return
LineNumberTable:
line 5: 0
public static void main(java.lang.String[]);
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=1, args_size=1
//读入#2代表的静态对象out,
0: getstatic #2 // Field java/lang/System.out:Ljav
a/io/PrintStream;
//读入Helloworld字串
3: ldc #3 // String Hello World
//发起执行out上的println方法
5: invokevirtual #4 // Method java/io/PrintStream.prin
tln:(Ljava/lang/String;)V
//返回
8: return
LineNumberTable:
line 8: 0
line 12: 8
}
Java是先编译成字节码,每个字节代表一条指令.
加了中文注解
然后由虚拟机执行字节码,把字节码转换成不同型号的cpu的指令。
字节码是跨平台而且统一的,这是Java的核心价值之一。
比如读入常量引索值的指令ldc(load constant) ,字节码为0x12,打开class文件,就会在相应位置看到一个0x12的字节。
javac 把源文件编译成字节码文件class
java 执行字节码文件,过程是把字节码翻译成cpu的指令。比如x86指令。