Java虚拟机不和包括java在内的任何语言绑定,它只与“Class”特定的二进制文件格式关联,Class文件中包含Java虚拟机指令集和符号表以及若干其他辅助信息。本文将以字节码的角度来研究Java虚拟机。
字节码
- Java跨平台的原因是JVM不跨平台
- 首先编写一个简单的java代码,一次为例进行讲解
- 测试1
public class MyTest1{
private int a=1;
public int getA(){
return a;
}
public void setA(int a){
this.a=a;
}
}
编译生成MyTest.class文件
使用反编译命令:javap MyTest
,对文件进行反编译,生成以下数据
Compiled from "A.java"
public class controller.A {
public controller.A();
public int getA();
public void setA(int);
}
增加参数,使用反编译命令:javap -c MyTest
,生成以下数据
Compiled from "A.java"
public class controller.A {
public controller.A();
Code:
0: aload_0
1: invokespecial #10 // Method java/lang/Object."<init>":()V
4: aload_0
5: iconst_1
6: putfield #12 // Field a:I
9: return
public int getA();
Code:
0: aload_0
1: getfield #12 // Field a:I
4: ireturn
public void setA(int);
Code:
0: aload_0
1: iload_1
2: putfield #12 // Field a:I
5: return
}
使用反编译命令:javap -verbose MyTest
,生成以下数据
Classfile /D:/eclipse_new/workspace/springmvc/