浅析class文件内部结构
最近在为工作的事情搞的很是纠结。由于前段时间在iteye上发表了一篇“应届生,求内推”的帖子,也联系了几个“内推手”。虽然后来不成功,不过还是要感谢大部分人。究其原因可能是因为我人在南昌,看到简历后觉得离工作的地方太远,所以没有发面试通知把。不过找工作是找工作,学习还是不能忘记的。下面的这篇文章,是我这几天看《深入浅出java 虚拟机》第六章 总结出来的一些自己的东西。
我在这里主要讲的是class file 文件结构。首先要给出两张表,第一张是class文件基本类型,第二张是class文件格式。
其实从上面的class文件中也可以看出一点端倪出来(尽管是乱码居多)。
我们现在分析一下class文件结构对应于上面给出那张表,每个项在这个文件中所指示的具体的值。当然了,这种乱码打开的肯定不适合分析,那就以16进制方式打开把。
CA FE BA BE 00 00 00 31 00 29 07 00 02 01 00 0A61 70 70 2F 4D 79 54 65 73 74 07 00 04 01 00 106A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 7401 00 02 69 64 01 00 13 4C 6A 61 76 61 2F 6C 616E 67 2F 49 6E 74 65 67 65 72 3B 01 00 04 6E 616D 65 01 00 12 4C 6A 61 76 61 2F 6C 61 6E 67 2F53 74 72 69 6E 67 3B 01 00 06 3C 69 6E 69 74 3E01 00 03 28 29 56 01 00 04 43 6F 64 65 0A 00 0300 0D 0C 00 09 00 0A 0A 00 0F 00 11 07 00 10 0100 11 6A 61 76 61 2F 6C 61 6E 67 2F 49 6E 74 6567 65 72 0C 00 12 00 13 01 00 07 76 61 6C 75 654F 66 01 00 16 28 49 29 4C 6A 61 76 61 2F 6C 616E 67 2F 49 6E 74 65 67 65 72 3B 09 00 01 00 150C 00 05 00 06 08 00 17 01 00 00 09 00 01 00 190C 00 07 00 08 01 00 0F 4C 69 6E 65 4E 75 6D 6265 72 54 61 62 6C 65 01 00 12 4C 6F 63 61 6C 5661 72 69 61 62 6C 65 54 61 62 6C 65 01 00 04 7468 69 73 01 00 0C 4C 61 70 70 2F 4D 79 54 65 7374 3B 01 00 28 28 4C 6A 61 76 61 2F 6C 61 6E 672F 49 6E 74 65 67 65 72 3B 4C 6A 61 76 61 2F 6C61 6E 67 2F 53 74 72 69 6E 67 3B 29 56 01 00 0567 65 74 49 64 01 00 15 28 29 4C 6A 61 76 61 2F6C 61 6E 67 2F 49 6E 74 65 67 65 72 3B 01 00 0573 65 74 49 64 01 00 16 28 4C 6A 61 76 61 2F 6C61 6E 67 2F 49 6E 74 65 67 65 72 3B 29 56 01 0007 67 65 74 4E 61 6D 65 01 00 14 28 29 4C 6A 6176 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 0100 07 73 65 74 4E 61 6D 65 01 00 15 28 4C 6A 6176 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 2956 01 00 0A 53 6F 75 72 63 65 46 69 6C 65 01 000B 4D 79 54 65 73 74 2E 6A 61 76 61 00 21 00 01
分析:
项目所占位数值说明Magic(魔数)4CA FE BA BE符合class文件格式Minor_version(次版本号)200 000Major_version(主版本号)200 31 十进制是49(JDK1.6)Constant_pool_count(常量池数)200 2941个Constant_pool不定(cp_info)后面一大串
心情不好,休息。下个礼拜可能去上海找工作。