class结构

重点:

大体结构
无符号数或表 中文翻译 英文 数量
u4 魔术 magic 1
u2 次版本号 minor_version 1
u2 主版本号 major_version 1
u2 常量计数器 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 接口计数器 interfaces_class 1
u2 接口索引集合 interfaces interfaces_count
u2 字段计数器 fields_count 1
fields_info 字段集合表 field fields_count
u2 方法计数器 methods_count 1
method_info 方法表集合 methods methods_count
u2 属性计数器 attributes_count 1
attribute_info 属性表集合 attribute attributs_count
需要记住的重点:
    魔术:kafebabe  固定
    常量池:字面量和符号引用,常量池中增加一个方法会正价4个常量,
            方法符号的引用,方法的部分符号引用,方法的名称, 方法的描述
    字段集合表包含的信息:
        字段的作用域(public,private,protected修饰符)
        实例变量还是类变量(static修饰符)
        可变性(final)
        并发可见性(volatile)
        可否被序列化
        字段数据类型(基本类型,对象,数组)
        字段名称

class文件包含的内容,数据结构
    class文件包含:虚拟机指令,符号表,其他辅助信息
    数据结构:无符号数,表
    重点:class文件采用类似c语言结构体的伪结构体来存储数据
    
如何查找
    首先将java文件编译成class文件
    然后使用javap 命令查看class文件
    主机后按图索冀

扩展

什么是字面量?
    字面量:int m = 3; (字面量就是=号右边的东西)
init和clinit  (这两个字段,使用javap命令可以看到)
    init:实例化初始化方法
    clinit:类和接口的初始化
        所有的类变量初始化语句和静态语句都被java编译收集到一起,放到clinit;
        init:
            调用new初始化对象的时候
            调用反射的时候newInstance()
            调用clone方法的时候
            ObjectInpustream.greObject序列化的时候

你可能感兴趣的:(class结构)