日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JVM-class文件完全解析-方法表集合

發布時間:2025/4/14 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM-class文件完全解析-方法表集合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?方法表集合

?  前面的魔數,次版本號,主板本號,常量池入口,常量池,訪問標志,類索引,父類索引,接口索引集合,字段表集合,那么再接下來就是方法表了.?

?

  方法表的構造如同字段表一樣,依次包括了訪問標志(access_flags),名稱索引(name_index),描述符索引(descriptor_index),屬性表集合(attributes)幾項.

  方法表結構:  

類型名稱數量
u2access_flags1
u2name_index1
u2descriptor_index1
u2attributes_count1
attribute_infoattributesattributes_count

  方法訪問標志:

標志名稱標志值含義
ACC_PUBLIC0x00 01方法是否為public
ACC_PRIVATE0x00 02方法是否為private
ACC_PROTECTED0x00 04方法是否為protected
ACC_STATIC0x00 08方法是否為static
ACC_FINAL0x00 10方法是否為final
ACC_SYHCHRONRIZED0x00 20方法是否為synchronized
ACC_BRIDGE0x00 40方法是否是有編譯器產生的方法
ACC_VARARGS0x00 80方法是否接受參數
ACC_NATIVE0x01 00方法是否為native
ACC_ABSTRACT0x04 00方法是否為abstract
ACC_STRICTFP0x08 00方法是否為strictfp
ACC_SYNTHETIC0x10 00方法是否是有編譯器自動產生的

  方法里的Java代碼,經過編譯器編譯成字節碼指令后,存放在方法屬性表集合中一個名為"Code"的屬性里面,屬性表作為calss文件格式中最具擴展的一種數據項目.

  在Java語言中,要重載一個方法,除了要與原方法具有相同的簡單名稱之外,還要求必須擁有一個與原方法不同的簽名,特征簽名就是一個方法中各個參數在常量池中的字段符號引用的集合,也就是因為返回值不會包含在特征簽名中,因此Java語言里面是無法僅僅靠返回值的不同來堆一個已有方法進行重載的.但是在class文件格式中,特征簽名的范圍更大一些,只要描述符不是完全一致的兩個方法也可以共存.也就是說,如果兩個方法有相同的名稱和特征簽名,但是返回值不同,那么也是可以合法共存與同一個class文件中的.

?下面繼續前面分析的class文件

  源文件:

  

  javap分析的常量池:

  

  class文件分析:

  

  直接看方法表部分(有點亂),首先是右下角的methods_count:0x00 02表示方法集中有兩個方法.access_flags:0x00 01表示訪問標志值為1,對應上面的方法訪問標志表的public,在看源文件的方法確實是public.name_index:0x00 07表示方法的名稱索引為7,對應上面的常量池7,為"<init>".decriptor_index:0x00 08代表描述符索引值為8,對應上面常量池的"()v".attributes_count:0x00 01代表此方法的屬性表集合有一項屬性,屬性的名稱索引為0x00 09,對應上面常量池9為"code ",說明此屬性是方法的字節碼描述.

轉載于:https://www.cnblogs.com/lrh-xl/p/5351059.html

總結

以上是生活随笔為你收集整理的JVM-class文件完全解析-方法表集合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。