java源文件經(jīng)編譯器編譯后生成class文件,你可曾想過(guò)class文件都包含哪些信息。class文件包含虛擬機(jī)執(zhí)行時(shí)所需的所有信息,其他語(yǔ)言只要能被編譯成class文件,那就能被虛擬機(jī)加載進(jìn)內(nèi)存執(zhí)行,比如Groovy程序可以被groovyc編譯器編譯成class文件。這也是Java虛擬機(jī)語(yǔ)言無(wú)關(guān)性的基石。
class文件結(jié)構(gòu)圖
class.png
常量池
常量主要包括類和接口全局限定名、方法名稱、字面常量等。后面的字段表,方法表,屬性表都會(huì)引用這里常量。
字段表
描述接口或類中聲明的變量。包含作用域、可變性、并發(fā)可見(jiàn)性等信息。
方法表
描述方法信息。包含方法作用域等信息。方法的代碼信息保存在屬性表中。
屬性表
包含一些屬性信息,字段表和方法表都會(huì)引用這里的屬性信息。比如代碼信息會(huì)被方法表引用。
總結(jié)
class文件有著非常嚴(yán)格的格式,這里僅僅粗略地看下具體包含哪些信息。