class文件简介

可以直接把.class文件拖到eclipse中,看到内容。

class文件简介

图0-1 class文件内容示例

1.文件格式

(1) magic
在class文件开头的四个字节, 存放着class文件的魔数,为固定值0XCAFEBABE。若无,则 不能被JVM识别。
(2)minor_version 和 major_version
紧接着魔数的四个字节是class文件的此版本号和主版本号。

2.类型表示

2.1 引用类型

L类型的全限定名;  
如Long类型对应的就是Ljava/lang/Long;

需要注意到,在表示全限定名时将点号替换成了“/”。

2.2 基本类型

每种基本数据类型都有一个大写字母做对应, void也有一个大写字符做对应。 下表是void和基本数据类型在描述符中的对应。

基本数据类型和void类型 类型的对应字符
byte B
char C
double D
float F
int I
long J
short S
boolean Z
void V

2.3 数组类型

若干个“[”  +  数组中元素类型的对应字符串  。如Object[][][]类型的对应字符串是: [[[Ljava/lang/Object; 
如double[][] 类型的对应字符串是: [[D

3.方法签名

(参数1类型 参数2类型 参数3类型 ...)返回值类型  
一些对照情况见下表。
方法描述符 方法声明
()I int getSize()
()Ljava/lang/String; String toString()
([Ljava/lang/String;)V void main(String[] args)
()V void wait()
(JI)V void wait(long timeout, int nanos)
(ZILjava/lang/String;II)Z boolean regionMatches(boolean ignoreCase, int toOffset, String other, int ooffset, int len)
([BII)I int read(byte[] b, int off, int len )
()[[Ljava/lang/Object; Object[][] getObjectArray()

4.反编译

eclipse有插件可以支持。