Java程序通過(guò) Javac編譯器 編譯成?字節(jié)碼( *.class )?然后通過(guò) Java虛擬機(jī) 去執(zhí)行,其中的字節(jié)碼文件就是接下來(lái)要學(xué)習(xí)的內(nèi)容。
第一部分:Java虛擬機(jī)的無(wú)關(guān)性
1.平臺(tái)無(wú)關(guān)性:在任何平臺(tái)上只要安裝虛擬機(jī)就可以運(yùn)行。
平臺(tái)無(wú)關(guān)性----是基于字節(jié)碼。
2.語(yǔ)言無(wú)關(guān)性:任何語(yǔ)言都可以在虛擬機(jī)上運(yùn)行。
語(yǔ)言無(wú)關(guān)性----是基于虛擬機(jī)和字節(jié)碼存儲(chǔ)格式。
第二部分:Class類文件的結(jié)構(gòu)
Class文件格式
類型名稱數(shù)量中文名稱
u4magic1?????????????????????魔數(shù)
u2minor_version1????次版本號(hào)
u2minor_version1????主版本號(hào)
u2constant_pool_count1 常量池
cp_infoconstant_poolconstant_pool_count-1?
u2access_flags1????????????訪問(wèn)標(biāo)識(shí)
u2this_class1????????????????類索引
u2super_class1? ? ? ? ? ?父類索引
u2interfaces_count1? ?接口索引集合
u2interfacesinterfaces_count?
u2fields_count1? ?????????字段表集合
field_infofieldsfields_count?
u2methods_count1? ? 方法表集合
method_infomethodsmethods_count?
u2attributes_count1? ?屬性表集合
attribute_infoattributesattributes_count?
? ? ?1.class類文件存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu):(1)無(wú)符號(hào)數(shù)。(2)表。
(1)無(wú)符號(hào)數(shù):基本上是數(shù)據(jù)類型,以u(píng)1,u2,u4,u8分別代表1個(gè)字節(jié),2個(gè)字節(jié),4個(gè)字節(jié),8個(gè)字節(jié),無(wú)符號(hào)數(shù)一般來(lái)表示,數(shù)字,索引引用,數(shù)量值,utf-8組成的值。
(2)表:它是由多個(gè)無(wú)符號(hào)數(shù)或其他表作為數(shù)據(jù)項(xiàng)構(gòu)成的復(fù)合數(shù)據(jù)類型。
作用:描述有層次關(guān)系的復(fù)合結(jié)構(gòu)的數(shù)據(jù)。
2.class類文件:它是一個(gè)有嚴(yán)格規(guī)定的文件,對(duì)于Class文件的數(shù)據(jù)項(xiàng),對(duì)于順序,大小,數(shù)量,都是有規(guī)定的,全部都能隨意改變的。
第三部分:class文件中的魔數(shù)和版本號(hào)
魔數(shù):每一個(gè)文件的頭4個(gè)字節(jié)被稱之為魔數(shù),他的唯一作用是確定這個(gè)文件是否可以被虛擬機(jī)接受的class文件
? ?class文件的版本號(hào):第5和第6個(gè)字節(jié)代表次版本號(hào)。
第7和第8個(gè)字節(jié)代表主板本號(hào)。