可以直接把.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类型类型的对应字符byteBcharCdoubleDfloatFintIlongJshortSbooleanZvoidV
2.3 数组类型
若干个“[” + 数组中元素类型的对应字符串 。如Object[][][]类型的对应字符串是:
[[[Ljava/lang/Object;
如double[][] 类型的对应字符串是:
[[D
3.方法签名
(参数1类型 参数2类型 参数3类型 ...)返回值类型
一些对照情况见下表。
方法描述符方法声明()Iint getSize()()Ljava/lang/String;String toString()([Ljava/lang/String;)Vvoid main(String[] args)()Vvoid wait()(JI)Vvoid wait(long timeout, int nanos)(ZILjava/lang/String;II)Zboolean regionMatches(boolean ignoreCase, int toOffset, String other, int ooffset, int len)([BII)Iint read(byte[] b, int off, int len )()[[Ljava/lang/Object;Object[][] getObjectArray()
4.反编译
eclipse有插件可以支持。