闃呰Java Virtual Machine Specification涓殑絎洓绔狅紝鐞嗚ВJava鐨刢lass鏂囦歡鏍煎紡銆?/p>
class鏂囦歡鐢?浣嶇殑瀛楄妭嫻佺粍鎴愩?/p>
The ClassFile Structure
ClassFile{
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool[constant_pool_count-1];
u2 access_flags;
u2 this_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attrributes_count];
}
璇存槑錛歶2琛ㄧず鏃犵鍙?瀛楄妭閲忥紝u4琛ㄧず鏃犵鍙?瀛楄妭閲忋?/p>
鍚勫瓧孌電殑璇存槑錛?/p>
magic
涓鑸簩榪涘埗鏂囦歡涓兘鏈塵agic number榪欎竴欏癸紝榪欎釜鏁拌鏄庤鏂囦歡鏄竴涓猚lass鏂囦歡錛屽畠鐨勫兼槸0xcAFEBABE銆?/p>
minor_version,major_version
class鏂囦歡鐨勭増鏈彿銆?/p>
constant_pool_count
甯擱噺姹犺〃涓」鐩暟鍔?寰楀埌銆備粠鍚庨潰鐨刢p_info constant_pool[constant_pool_count-1];涔熷鏄撶悊瑙h繖涓肩殑鎰忔濄?/p>
cp_info constant_pool[]
瀛樺偍璇lass鏂囦歡涓嬌鐢ㄥ埌鐨勫父閲忎俊鎭?/p>
access_flag
璇存槑璇lass鏂囦歡鐨勮闂潈闄愬拰鐩稿叧灞炴э紝閫氳繃浣嶆帺鐮佹潵璁懼畾銆?/p>
Flag Name | 鍊?/td> | 瑙i噴 |
ACC_PUBLIC | 0x0001 | public |
ACC_FINAL | 0x0010 | final |
ACC_SUPER | 0x0020 | 璺熻皟鐢╥nvokespecial鎸囦護鏃剁殑澶勭悊鏈夊叧 |
ACC_INTERFACE | 0x0200 | 榪欐槸涓帴鍙?/td> |
ACC_ABSTRACT | 0x0400 | abastract |
ACC_SYNTHETIC | 0x1000 | 娌℃湁鍦ㄦ簮浠g爜涓嚭鐜幫紝璇ョ被鏄紪璇戝櫒鐢熸垚鐨?/td> |
ACC_ANNOTATION | 0x2000 | 娉ㄨВ綾誨瀷 |
ACC_ENUM | 0x4000 | 鏋氫婦綾誨瀷 |
榪欎簺灞炴ч兘寰堝鏄撶悊瑙o紝姣斿鎴戜滑瀹氫箟涓涓被public final Test{},鍒橳est.class鐨刟ccess_flag涓紝ACC_PUBLIC鍜孉CC_FINAL鏄疆浣嶇殑錛岃孉CC_INTERFACE涓欏硅偗瀹氭槸0銆傚緢澶氱被浼肩殑緇勫悎瑙勫垯鍊掓槸瀹規(guī)槗鑷繁鎬葷粨鍑烘潵錛屾瘮濡傚鏋淎CC_INTERFACE緗綅浜嗭紝閭h偗瀹欰CC_ABSTRACT涔熸槸緗綅鐨勶紝鍥犱負鎺ュ彛鑲畾鏄娊璞$殑錛涘鏋淎CC_ANNOTATION緗綅浜嗭紝閭CC_ANNOTATION鑲畾鍚屾椂緗綅錛岀瓑絳夛紝璇稿姝ょ被銆?/p>
鐢諱竴涓叿浣撶殑浣嶇ず鎰忓浘琛ㄧず錛?/p>
this_class
涓涓笅鏍囷紝鎸囧悜甯擱噺姹犺〃涓唬琛ㄥ綋鍓嶇被鐨凜onstant_Class_info銆?/p>
super_class
涓?錛屾垨鑰呬負涓涓笅鏍囷紝鎸囧悜甯擱噺姹犱腑浠h〃鍏剁埗綾葷殑Constant_Class_info銆傚鏋滆繖涓間負0錛岄偅涔堝綋鍓嶇被鑲畾鏄疧bject綾匯傚鏋滃綋鍓嶇被鏄竴涓帴鍙o紝璇ヤ笅鏍囨寚鍚戠殑鏄疧bject綾葷殑鎻忚堪淇℃伅銆?/p>
interface_count
璇ョ被瀹炵幇鐨勬帴鍙f暟錛屾垨鑰呰鎺ュ彛瀹炵幇鐨勮秴鎺ュ彛鏁般?/p>
interfaces[]
鍏蜂綋鐨勬帴鍙d俊鎭紝姣忎竴欏歸兘鏄父閲忔睜琛ㄤ腑鐨勪竴涓笅鏍囷紝鎸囧悜琛ㄧず鎺ュ彛鐨凜onstant_Class_info銆?/p>
鍚庨潰鍑犱釜渚濇鏄瓧孌碉紙field錛夛紝鏂規(guī)硶錛坢ethods錛夊拰灞炴х殑鎻忚堪錛屼笉鍐嶈禈榪幫紝
涓嬮潰鍏蜂綋鐨勫垎鏋愪竴涓猚lass鏂囦歡銆傛簮鏂囦歡寰堢畝鍗曪細
public class Test{
public static void main(String[] args){
System.out.println("Hello World!");
}
}
緙栬瘧錛屽緱鍒癟est.class鏂囦歡錛屼嬌鐢╓inHex鎵撳紑銆?/p>
鍓?涓瓧鑺傛槸magic閮ㄥ垎錛屽唴瀹逛負0xCAFEBABE;闅忓悗鐨?涓瓧鑺傛槸class鏂囦歡鐨勭増鏈彿錛岃繖閲屼富鐗堟湰鍙鋒槸0x0032錛屼篃灝辨槸50錛岃繖鏄嬌鐢╦dk1.6緙栬瘧鍑虹殑class鏂囦歡銆傚啀鍚庨潰鐨?涓瓧鑺傛槸甯擱噺姹犺〃鐨勫ぇ灝忎俊鎭紝0x001D錛屼篃灝辨槸29錛岃鏄庡父閲忔睜琛ㄤ腑涓鍏辨湁28欏廣備負浜嗘柟渚胯瀵燂紝鍙互浣跨敤javap -verbose Test寰楀埌鐨勭粨鏋滃拰褰撳墠鐨勪簩榪涘埗鏂囦歡榪涜瀵規(guī)瘮銆?/p>
鍏ラ棬鍒版錛屼互鍚庣戶緇?/p>
浠ヤ竴縐嶇帺鐨勫績鎬佸涔爅ava錛屽叧娉╦ava鐨勭紪璇戝疄鐜板拰java铏氭嫙鏈哄師鐞嗭紝鏆傛椂涓嶅幓鍏蟲敞java鐩稿叧鐨勫悇縐嶅簲鐢ㄣ傜洰鏍囦笉鑳藉お澶氾紝鏇翠笉鑳藉お楂橈紝鍒囧繉錛?
鍑犱釜鍏蜂綋鐨勶紝鍙搷浣滅殑鐩爣錛?
class鏂囦歡鏍煎紡鍒嗘瀽銆傛牴鎹甹vm瑙勮寖涓殑瀹氫箟錛岀悊瑙lass鏂囦歡緇撴瀯錛岃兘鑷繁鍐欎竴涓垎鏋愬伐鍏鳳紱鍒嗘瀽javap鐨勬簮浠g爜銆?nbsp; 娣卞叆瀛︿範緙栬瘧鍘熺悊錛屽垎鏋恓avac鐨勬簮浠g爜銆備互鍓嶅垎鏋愯繃涓灝忛儴鍒嗭紝浣嗕笉澶熸繁鍏ャ?
鐮旂┒澶氱嚎紼嬬紪紼嬫ā鍨嬶紝鏈夊嚑鏈功閲嶇偣鐨勭湅涓涓嬶紝銆妘nix緗戠粶緙栫▼銆嬶紝銆婇潰鍚戞ā寮忕殑杞歡浣撶郴緇撴瀯鍗?錛氱敤浜庡茍鍙戝拰緗戠粶鍖栧璞$殑妯″紡銆嬶紝銆奝ATTERN-ORIENTED SOFTWARE ARCHITECTURE A Pattern Language for Distributed Computing銆嬶紝銆奐ava Concurrency in Practice銆嬨?
openjdk宸茬粡鍦║buntu涓婃瀯寤烘垚鍔燂紝鍙互鑰冭檻榪涜涓浜涜窡韙拰璋冭瘯鍒嗘瀽銆?/p>