Class文件解讀(五)

接上篇:http://www.javashuo.com/article/p-pjhsbtkd-kz.htmljava

方法表集合ide

       Class文件存儲格式中對方法的描述與對字段的描述幾乎採用了徹底一致的方式,換句話說方法表的結構與屬性表的結構徹底一致,方法表結構依次包括了訪問標誌(access_flags)、名稱索引(name_index)、描述符索引(descrpitor_index)、屬性表集合(attributes)幾項,這些數據項目的含義也十分相似。spa

                

       因爲volatile關鍵字和transient關鍵字不能修飾方法,因此方法表的訪問標誌中沒有了ACC_VILATILE標誌和ACC_TRANSIENT標誌,對於方法表全部標誌位及其取值參見下表。.net

標誌名稱 標誌值 含義
ACC_PUBLIC Ox0001 方法是否爲public
ACC_PRIVATE Ox0002 方法是否爲private
ACC_PROTECTED Ox0004 方法是否爲protected
ACC_STATIC Ox0008 方法是否爲static
ACC_FINAL Ox0010 方法是否爲final
ACC_SYNCHRONIZED Ox0020 方法是否爲synchronized
ACC_BRIDGE Ox0040 方法是否由編譯器產生的橋接方法
ACC_VARARGS Ox0080 方法是否接受不定參數
ACC_NATIVE Ox0100 方法是否爲native
ACC_ABSTRACT Ox0400 方法是否爲abstract
ACC_STRICTFP Ox0800 方法是否爲strictfp
ACC_SYNTHTIC Ox1000 方法是不是由編譯器自動產生的

 

        方法的定義能夠經過訪問標誌、名稱索引、描述符索引表達清楚,方法裏的java代碼,通過編譯器編譯成字節碼指令後,存放在方法屬性表集合中一個名爲"Code"的屬性裏面,屬性表做爲Class文件格式中最具擴展性的一種數據項目,將在下篇博客中進行介紹。blog

        與Class文件中的字段表集合相對應,若是子類沒有去重寫(Override)父類中的某個方法,則該方法不會出如今該子類Class文件的方法表集合中,但一樣的,有可能會在方法表集合中出現由編譯器自動添加的方法,最經典的就是類構器"<clinit>"方法和實例構造器"<init>"方法。索引

        在java語言中,重載(Overload)一個方法,條件是要有與被重載方法具備相同的簡單名稱,並且還須要與原方法有一個不一樣的特徵簽名,特徵簽名就是一個方法中各個參數在常量池中的字段符號引用的集合,也就是由於返回值不會包含在特徵簽名中,所以Java語言裏面是沒法僅僅依靠返回值的不一樣來對一個已有方法進行重載的。可是在Class文件格式中,特徵簽名的範圍更大一些,只要描述符(包括方法返回類型)不是徹底一致的兩個方法也能夠共存。ci

相關文章
相關標籤/搜索