重點:
大體結構
無符號數(shù)或表 | 中文翻譯 | 英文 | 數(shù)量 |
---|---|---|---|
u4 | 魔術 | magic | 1 |
u2 | 次版本號 | minor_version | 1 |
u2 | 主版本號 | major_version | 1 |
u2 | 常量計數(shù)器 | constant_poo_count | 1 |
cp_info(這是一個表) | 常量池 | constant_pool | constant_pool_count-1 |
u2 | 訪問標記 | access_flags | 1 |
u2 | 類索引 | this_class | 1 |
u2 | 父類索引 | super_class | 1 |
u2 | 接口計數(shù)器 | interfaces_class | 1 |
u2 | 接口索引集合 | interfaces | interfaces_count |
u2 | 字段計數(shù)器 | fields_count | 1 |
fields_info | 字段集合表 | field | fields_count |
u2 | 方法計數(shù)器 | methods_count | 1 |
method_info | 方法表集合 | methods | methods_count |
u2 | 屬性計數(shù)器 | attributes_count | 1 |
attribute_info | 屬性表集合 | attribute | attributs_count |
需要記住的重點:
魔術:kafebabe 固定
常量池:字面量和符號引用,常量池中增加一個方法會正價4個常量,
方法符號的引用亭敢,方法的部分符號引用喳整,方法的名稱褒纲, 方法的描述
字段集合表包含的信息:
字段的作用域(public路幸,private糙及,protected修飾符)
實例變量還是類變量(static修飾符)
可變性(final)
并發(fā)可見性(volatile)
可否被序列化
字段數(shù)據(jù)類型(基本類型,對象厌小,數(shù)組)
字段名稱
class文件包含的內(nèi)容恢共,數(shù)據(jù)結構
class文件包含:虛擬機指令,符號表璧亚,其他輔助信息
數(shù)據(jù)結構:無符號數(shù)讨韭,表
重點:class文件采用類似c語言結構體的偽結構體來存儲數(shù)據(jù)
如何查找
首先將java文件編譯成class文件
然后使用javap 命令查看class文件
主機后按圖索冀
擴展
什么是字面量?
字面量:int m = 3; (字面量就是=號右邊的東西)
init和clinit (這兩個字段癣蟋,使用javap命令可以看到)
init:實例化初始化方法
clinit:類和接口的初始化
所有的類變量初始化語句和靜態(tài)語句都被java編譯收集到一起拐袜,放到clinit;
init:
調(diào)用new初始化對象的時候
調(diào)用反射的時候newInstance()
調(diào)用clone方法的時候
ObjectInpustream.greObject序列化的時候