class文件是一組以八字節(jié)為基礎(chǔ)單位的二進(jìn)制流,class文件格式采用c語(yǔ)言的偽結(jié)構(gòu)來(lái)存儲(chǔ)數(shù)據(jù)裕循,它一共有兩種數(shù)據(jù)類(lèi)型枷莉,
一是無(wú)符號(hào)數(shù):基本數(shù)據(jù)類(lèi)型(數(shù)字娇昙,索引引用,數(shù)量值笤妙。)
二是表:多個(gè)無(wú)符號(hào)數(shù)或其他表構(gòu)成的復(fù)合數(shù)據(jù)類(lèi)型冒掌。
class類(lèi)文件結(jié)構(gòu)是被嚴(yán)格限制:
第一:魔術(shù)與class文件的版本噪裕。
第二:常量池,class文件的資源倉(cāng)庫(kù)股毫,常量池中存的是字面量和符號(hào)引用膳音。
字面量:字符串和final常量
符號(hào)引用:類(lèi)和接口的全限定名,字段的名稱和描述符铃诬,方法的名稱和描述符祭陷。(備注:描述符的作用是用來(lái)描述字段的數(shù)據(jù)類(lèi)型,方法的參數(shù)列表和返回值)
為什么需要符號(hào)引用呢趣席?
虛擬機(jī)加載class文件的時(shí)候進(jìn)行動(dòng)態(tài)鏈接兵志。也就是說(shuō),在class文件中不會(huì)保存各個(gè)方法字段的最終內(nèi)存布局信息宣肚,因此這些字段想罕、方法的符號(hào)引用不經(jīng)過(guò)運(yùn)行期轉(zhuǎn)換的話,無(wú)法得到真正的內(nèi)存入口地址钉寝,也就是無(wú)法直接被虛擬機(jī)使用弧呐。當(dāng)虛擬機(jī)運(yùn)行時(shí),需要從常量池中獲得對(duì)應(yīng)的符號(hào)引用嵌纲,再在類(lèi)創(chuàng)建時(shí)或運(yùn)行時(shí)解析俘枫,翻譯到具體的內(nèi)存地址之中。
第三:訪問(wèn)標(biāo)志:用于識(shí)別類(lèi)或者接口層次的訪問(wèn)信息逮走。
第四:類(lèi)索引鸠蚪,父類(lèi)索引與接口,所以集合:用于確定類(lèi)的繼承關(guān)系师溅。
第五:字段表集合:用于描述接口或者類(lèi)中聲明的變量茅信。
備注:字段表集合和方法表集合的存儲(chǔ)結(jié)構(gòu):訪問(wèn)標(biāo)志,名稱索引墓臭,描述符索引蘸鲸,屬性表集合。其中名稱索引和描述符索引是對(duì)常量池的應(yīng)用窿锉。
第七:屬性表集合:用于描述某些場(chǎng)景專有的信息酌摇。
變量賦值一共有兩種方式:
對(duì)于非靜態(tài)變量來(lái)說(shuō)。它的賦值是在實(shí)例構(gòu)造器方法中進(jìn)行的嗡载。
而對(duì)于那邊來(lái)說(shuō)窑多。第一種方法是在類(lèi)構(gòu)造器方法中進(jìn)行賦值;第二種是使用Constantvalue屬性洼滚。
Boy-20180721