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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java class 结构_Java class文件的结构

發(fā)布時間:2024/9/15 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java class 结构_Java class文件的结构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Java class文件的結(jié)構(gòu)

class文件是Java源代碼編譯之后產(chǎn)生的二進制文件,代碼中的各個項目嚴格按照Java的規(guī)范組織。

class文件以一張表的形式組織代碼中的各個部分:

名稱

釋義

大小

magic

魔數(shù)

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

實現(xiàn)接口的數(shù)目

2Byte

interfaces

實現(xiàn)的接口

由interfaces_count決定

fields_count

成員變量的數(shù)目

2Byte

fields

成員變量

由fields_count決定

methods_count

方法數(shù)

2Byte

methods

方法

由methods_count決定

attributes_count

屬性數(shù)

2Bytes

attributes

屬性

由attributes_count決定

魔數(shù)

magic(魔數(shù))的作用是用于識別文件類型是否是class文件,class文件的魔數(shù)是0xCAFEBABE 。

版本號

minor_version和major_version用于標記該class文件是由哪個版本的Java編譯器編譯而來。由低版本的Java編譯器編譯產(chǎn)生的class文件可以運行在高版本的虛擬機上,即向下兼容,但虛擬機不能執(zhí)行超過自身版本的class文件,即使高版本class文件除了版本號以外其他內(nèi)容與低版本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(接口索引)用于確定該類實現(xiàn)的所有接口的全限定名。它們的值指向常量池中的對應(yīng)常量。

成員變量

fields (成員變量)用于保存Class中的所有成員變量,包括static變量和instance變量。Class中的所有成員變量以一張表格的形式存儲,存儲了成員變量的訪問標志位、變量名索引、變量描述符索引、變量屬性等信息。

需要注意的是,fields中不會包含從父類中繼承來的成員變量。

方法

methods(方法)用于保存Class中聲明的所有方法,包括static方法和instance方法。Class中的所有方法也是以一張表格的形式存儲,存儲的信息也主要是:方法訪問標志位、方法名索引、方法描述符索引、方法屬性等信息。如果父類的方法沒有被子類覆蓋,子類的methods中也不會出現(xiàn)父類的方法。

屬性

attributes(屬性)用于保存Class中成員變量或者方法的詳細特有信息。每個field或者method中都可以包含一個屬性表,用于描述該成員變量或者方法的詳細信息。

屬性由多個屬性表組成,每個屬性表包含一種特定類型的屬性。最常見的幾個屬性類型如下表:

名稱

含義

使用位置

Code

方法的字節(jié)碼指令

methods(方法表)

ConstantsValue

final定義的常量值

fields(字段表)

Exceptions

方法拋出的異常表

methods(方法表)

LineNumberTable

源代碼行號與字節(jié)碼指令的映射關(guān)系表

Code

LocalVariableTable

局部變量表

methods (方法表)

參考資料:《深入理解Java虛擬機》

總結(jié)

以上是生活随笔為你收集整理的java class 结构_Java class文件的结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。