java源文件经编译器编译后生成class文件,你可曾想过class文件都包含哪些信息。class文件包含虚拟机执行时所需的所有信息,其他语言只要能被编译成class文件,那就能被虚拟机加载进内存执行,比如Groovy程序可以被groovyc编译器编译成class文件。这也是Java虚拟机语言无关性的基石。
class文件结构图
常量池
常量主要包括类和接口全局限定名、方法名称、字面常量等。后面的字段表,方法表,属性表都会引用这里常量。
字段表
描述接口或类中声明的变量。包含作用域、可变性、并发可见性等信息。
方法表
描述方法信息。包含方法作用域等信息。方法的代码信息保存在属性表中。
属性表
包含一些属性信息,字段表和方法表都会引用这里的属性信息。比如代码信息会被方法表引用。
总结
class文件有着非常严格的格式,这里仅仅粗略地看下具体包含哪些信息。