java class 结构_Java class文件的结构
Java class文件的結構
class文件是Java源代碼編譯之后產生的二進制文件,代碼中的各個項目嚴格按照Java的規范組織。
class文件以一張表的形式組織代碼中的各個部分:
名稱
釋義
大小
magic
魔數
4 Byte
minor_version
子版本號
2Byte
major_version
主板本號
2Byte
constant_pool_count
常量池的大小
2Byte
constant_pool
常量池
由constant_pool_count決定
access_flags
訪問標志位
2Byte
this_class
類索引
2Byte
super_class
父類索引
2Byte
interfaces_count
實現接口的數目
2Byte
interfaces
實現的接口
由interfaces_count決定
fields_count
成員變量的數目
2Byte
fields
成員變量
由fields_count決定
methods_count
方法數
2Byte
methods
方法
由methods_count決定
attributes_count
屬性數
2Bytes
attributes
屬性
由attributes_count決定
魔數
magic(魔數)的作用是用于識別文件類型是否是class文件,class文件的魔數是0xCAFEBABE 。
版本號
minor_version和major_version用于標記該class文件是由哪個版本的Java編譯器編譯而來。由低版本的Java編譯器編譯產生的class文件可以運行在高版本的虛擬機上,即向下兼容,但虛擬機不能執行超過自身版本的class文件,即使高版本class文件除了版本號以外其他內容與低版本class文件完全相同。
常量池
constant_pool(常量池)主要用于存放Class中的字面常量(literal)以及符號常量 。字面常量包括:Class中的字符串常量、聲明為final的值。符號常量主要包括:類的全限定名、成員變量的名稱和描述符、方法的名和描述符。
常量池由多個常量表組成,每個常量表保存一種常量,如:int型常量表保存的都是int類型的常量,字符串類型常量表保存所有String類型的常量。Java 7 之前共有11種不同的常量表,自 Java 7 開始新增3種常量表。
訪問標志位
access_flags用于保存Class以及Interface的訪問標志,包括Class訪問限定類型是public、protected、private中的一種,是否final、abstract的Class等。
類索引、父類索引以及接口索引
this_class(類索引)用于確定該類的全限定名,super_class(父類)用于確定父類的的全限定名,interfaces(接口索引)用于確定該類實現的所有接口的全限定名。它們的值指向常量池中的對應常量。
成員變量
fields (成員變量)用于保存Class中的所有成員變量,包括static變量和instance變量。Class中的所有成員變量以一張表格的形式存儲,存儲了成員變量的訪問標志位、變量名索引、變量描述符索引、變量屬性等信息。
需要注意的是,fields中不會包含從父類中繼承來的成員變量。
方法
methods(方法)用于保存Class中聲明的所有方法,包括static方法和instance方法。Class中的所有方法也是以一張表格的形式存儲,存儲的信息也主要是:方法訪問標志位、方法名索引、方法描述符索引、方法屬性等信息。如果父類的方法沒有被子類覆蓋,子類的methods中也不會出現父類的方法。
屬性
attributes(屬性)用于保存Class中成員變量或者方法的詳細特有信息。每個field或者method中都可以包含一個屬性表,用于描述該成員變量或者方法的詳細信息。
屬性由多個屬性表組成,每個屬性表包含一種特定類型的屬性。最常見的幾個屬性類型如下表:
名稱
含義
使用位置
Code
方法的字節碼指令
methods(方法表)
ConstantsValue
final定義的常量值
fields(字段表)
Exceptions
方法拋出的異常表
methods(方法表)
LineNumberTable
源代碼行號與字節碼指令的映射關系表
Code
LocalVariableTable
局部變量表
methods (方法表)
參考資料:《深入理解Java虛擬機》
總結
以上是生活随笔為你收集整理的java class 结构_Java class文件的结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dapper 连接mysql_如何在.N
- 下一篇: java uuid 排序_如何在java