Class 文件结构

Class 文件结构
一.语言无关性
    1.java虚拟机提供了java语言跨平台功能。可以让同一份Class文件运行在不同的平台上
    2.java虚拟机不仅提供了跨平台功能,甚至还还提供了跨语言的特性,只要各种语言的源码
       编译成 Class 文件,理论上都可以在 java 虚拟机上运行

二.Class 文件
    1.Class文件的结构(包含 类的属性,类的方法<访问标记,名称,描述符,属性>,
      类的字段<访问标记表项,名称,描述符,属性>,实现接口,父类,魔数<Class文件的特征>
      小版本号,大版本号,常量池<各种常量,整数,字符串,Class>,访问标记<public,static>
      当前类)
    2.Class 文件结构体的定义:
        a.文件以一个4字节Magic(魔数)开头,紧跟着两个大小版本号
        b.在版本号之后是常量池,常量池的个数为conctant_pool_count,常量池中的表项有conctant_pool_count-1项
        c.常量池之后是类的访问修饰符,代表自身类的引用,父类引用以及接口数量和实现的接口引用
        d.在接口之后,有着字段的数量和字段描述,方法数量以及方法的描述
        e.最后存放着类文件的属性信息
    3.魔数:Class 文件的标记,是一个4个字节的无符号整数,固定为 OxCAFEBABE
    4.Class 文件的版本:当前的 Class 文件,是由哪个版本的编译器编译产生的。高版本的虚拟机向下兼容
      低版本编译的Calss文件,低版本的虚拟机不向上兼容高版本编译的Class 文件。所以在开发环境跟实际生产
      环境中,应该注意JDK 的版本是否一致
    5.常量池:Class文件中内容最丰富的区域之一 ,存放着所有的常数,是整个Class 文件的基石。
      常量池底层数据类型:COUNTANT_Utf8 , CONSTANT_Intrger ,CONSTANT_Float , CONSTANT_Long ,
      CONSTANT_Double 分别表示 UTF8字符串,整数 , 浮点数,长整数和双精度浮点常量
      CONSTANT_NameAndType 表示一个名词和类型
      CONSTANT_Methoderf 表示一个类的方法
      CONSTANT_Fieldref 表示一个类字段的引用
      CONSTANT_InterfaceMethoderf 表示一个接口的方法
      CONSTANT_MethodHandle 表示函数的方法,类的字段或者构造函数
      CONSTANT_MethoderType 描述一个方法签名
      CONSTANT_InvokeDynamic 描述一个动态调用,动态调用的是java 虚拟机平台引入的专门为动态语言
                             提供函数动态调用绑定支持的功能
    6.Class的访问标记 :两个字节表示,用于表明该类的访问信息
    7.当前类,父类的接口 :指定该类的类别,父类类别以及实现的接口
    8.Class 文件字段 :类的字段信息
    9.Class文件的方法基本结构:类的方法信息
    10.方法的执行主体-Code 属性:
    11.记录行号 - LineNumberTble 属性
    12.保存局部变量和参数 - LacalVariableTable 属性
    13.加快字节码校验 - StackMaoTble 属性
    14.抛出异常 - Exception 属性
    15.SourceFile 属性 : 描述当前 Class 文件是由哪个源代码文件编译而来
    16.BootstraoMethods 属性:描述和保存引导方法
    17.InnerClasses 属性 : 描述外部类和内部类之间的联系

三.ASM : 一款操作 java 字节码的操作库,直接工作于底层。使用复杂,要求开发人员熟悉和掌握Class 文件的基本格式

    和java字节码对开发人的的要求相对较高,因此很少被直接使用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值