可以直接把.class文件拖到eclipse中,看到内容。
图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有插件可以支持。