字节码:
每个JVM指令都包含一个操作码opcode,随后是0个或多个表示操作参数的操作数.
如:
int i=0;
i=i+1;
System.out.println(i);
对应字节码:
0 iconst_0 //定义了一个值未0的整形常数
1 istore_1 //将来自堆栈顶部的一个值(本例中为0)存储再由下标规定的局部变量(本例中为i)中
2 inc 1 by 1
5 getstatic #21 <java/lang/System.out>
8 iload_1
9 invokevirtual #27 <java/io/PrintStream.println>
12 return
静态类字段(System.out)的名称和参数值(i)再println方法被调用之前首先被退到操作数堆栈,关于指令的详细信息可在JVM规范中获得.(The
Java Virtual Machine Specification)
Java 声明的类型和用在字节码中的相应字段的描述符类型对应关系如下:
byte : B
char : C
double: D
float : F
int : i
long : J
short : S
boolean: Z
Classname instance : L<Classname>;
[](一维数组) : [
例如:
ing number; 对应 I
int[][] number; 对应 [[I
Object reference; 对应 Ljava.lang.Object;
方法描述符采用如下格式创建:
([<param1>[...<param N >]])<return>
其中<param1>....<param N>是可选参数类型描述符
<return>是返回类型描述符,如果返回值为空则为V
例如:
Integer getIntProperty(String PropertyName,int defaultValue)
有如下方法:
(Ljava.lang.String;I)Ljava.lang.Integer;
某些方法具有预定义的名称,静态出时候就命名为<clinit>,实例初始化和构造函数就命名为<init>.