Class 文件是Java 虛擬機定義并被其所識別的文件格式,通俗地講,每一個接口或者類對應一個Class 文件。
1.Class 文件格式
1.Class 文件是一組以8 位字節為基礎單位的的二進制流。
2.各數據項目之間沒有任何分隔符
3.Class 文件格式采用的結構只有兩種數據結構:無符號數和表。
4.無符號數:以u1,u2 等表示1,2 個字節的無符號數,無符號數可用于描述數字、索引引用、數量值、字符串值。
5.表:以多個無符號數或者表組成,通常以_info 結尾,整個Class 文件就是一張表。
2.Class 文件的組成:

* 魔數:Class 文件開始四個字節是魔數,用于驗證該文件是否能被虛擬機執行
* 版本號:魔數后四個字節則是Class 文件的主版本號和次版本號
* 常量池:版本號后面緊跟著的則是常量池部分。常量池不同與java 中,它是由1 開始計數的,常量癡表的數目是常量個數減一。第0 項為保留項目,用于指示當前Class 文件不需要引用任何一個常量池。常量池中主要包含兩大類常量:
* 字面量:包括文本字符串,被聲明為final 的常量值等。
* 符號引用:包括類和接口的權限定名,字段的名稱和描述符,方法的名稱和描述符
* 訪問標志:常量池部分結束后則是訪問標志部分,該部分包括信息:是類還是接口,是否定義為public,是否final,是否abstract 等信息。
* 訪問標志之后則是類索引,父類索引,接口索引集合部分,該部分的主要信息為:該類的信息的索引,父類的信息的索引,實現接口的個數和對應接
* 信息的索引。(通過指向一個類型為CONSTANT_Class_info 的類描述符常量,從而在對應的常量池找到相關信息)
* 字段表:接下來的部分則是用于描述類聲明的變量信息,包括變量的作用域,是否為static,是否為final 等信息。
* 方法表:方法表則是用于描述類中方法的信息,與字段表類似。
* 屬性表:屬性表在字段表和方法表中都會出現,主要用于描述某些場景特有的信息。比如方法是否拋出異常,被final 聲明的變量的值,內部類列表等信息。
- 第一章 熱修復設計
- 第一節、AOT/JIT & dexopt 與dex2oat
- 一、AOT/JIT
- 二、dexopt 與dex2oat
- 第二節、熱修復設計之CLASS_ISPREVERIFIED 問題
- 一、前言
- 二、建立測試Demo
- 三、制作補丁
- 四、加載補丁
- 五、CLASS_ISPREVERIFIED
- 第三節、熱修復設計之熱修復原理
- 一、Android 熱修復
- 二、Android 虛擬機和編譯加載順序
- 三、混合模式的理解
- 四、源碼類到機器執行的文件過程
- 五、補丁包
- 六、類補丁生效原理
- 七、Davlik 虛擬機的限制
- 八、Davlik Class resolved by unexpected DEX: 限制和處理方式
- 九、類加載器的雙親委派加載機制
- 第四節、Tinker 的集成與使用(自動補丁包生成)
- 一、簡述
- 二、Tinker 組件依賴
- 三、Tinker 的配置及任務
- 四、Tinker 封裝與拓展
- 五、編寫Application 的代理類
- 六、常用API
- 七、測試
- 八、細節
- 第二章 插件化設計
- 第一節、Class 文件與Dex 文件的結構解讀
- 一、Class 文件
- 二、Dex 文件
- 三、Class 文件和Dex 文件對比
- 第二節、Android 資源加載機制詳解
- 第三節、四大組件調用原理
- 第四節、so 文件加載機制
- 第五節、Android 系統服務實現原理
- 第三章 組件化框架設計
- 第一節、阿里巴巴開源路由框——ARouter 原理分析
- 第二節、APT 編譯時期自動生成代碼&動態類加載
- 第三節、Java SPI 機制
- 第四節、AOP&IOC
- 第五節、手寫組件化架構
- 第四章 圖片加載框架
- 第一節 圖片加載框架選型
- 第二節 Glide 原理分析
- 第三節 手寫圖片加載框架實戰
- 第五章 網絡訪問框架設計
- 第一節 網絡通信必備基礎
- 第二節 OkHttp 源碼解讀
- 第三節 Retrofit2 源碼解析
- 第六章 RXJava響應式編程框架設計
- 第一節 RXJava之鏈式調用
- 第二節 RXJava之擴展的觀察者模式
- 第三節 RXJava之事件變換設計
- 第四節 Scheduler 線程控制
- 第七章 IOC架構設計
- 第一節 依賴注入與控制反轉
- 第二節 ButterKnife 原理上篇、中篇、下篇
- 第三節 IOC架構設計之Dagger2架構設計
- 第八章 Android架構組件 JetPack
- 第一節 LiveData的工作原理
- 第二節 Navigation 如何解決tabLayout 問題
- 第三節 ViewModel 如何感知View 生命周期及內核原理
- 第四節 Room 架構方式方法
- 第五節 dataBinding 為什么能夠支持MVVM
- 第六節 WorkManager 內核揭秘
- 第七節 Lifecycles 生命周期