接上篇: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