• [笔记] 深入java虚拟机 java class文件


    ClassFile表

    magic  ----- class文件的前四个字节0xCAFEBABE

    minor_version -------- 次版本号

    major_version -------- 主版本号

    constant_pool_count ------- 常量池列表中的入口个数+1(索引为0)

    constant_pool ------常量池入口列表

    access_flag -------- 类或接口的信息,例如是类或接口?final?abstract?public?

    this_class --------- 值为常量池的一个索引,该索引的tag为constant_class,tag后紧跟的name_index为另一索引,该索引的tag为constant_utf8,其中包含这个类或接口的全限定名

    super_class -------- 值为常量池索引,类型通this_class,除了Object外,super_class对所有的类均有效,Object的super_class为0, 接口的super_class为java.lang.Object.

    interfaces_count ------- 该类直接实现或者由接口扩展的父接口的数量

    interfaces -------- 数组,每一个值为父接口的常量池的索引,类型同this_class

    fileds_count ------ 不包括从父类或接口继承的field,可能会包含class中没有声明的字段,这是因为java编译器可能在编译阶段向类或接口中添加了字段,例如为了保持对外部类示例的引用,java编译器会为每个外围类实例添加实例变量

    fields ------- 包含了filed_info表, 包含字段名称,描述符和修饰符

    methods_count ------ 方法的总计数,只包括类或接口显示定义的方法,不包括继承的
    methods ------ 包括method_info表,方法名和描述符,如果方法不是本地或抽象的,则还包含局部变量所需的栈空间长度,为方法所捕获的异常表,局部变量表等。

    attributes_count -------

    attrbutes -------

    常量池中的三种字符串:

    全限定名 --  例如java/util/Hashtable

    简单名称 -- filed和method名称的简单表示

    描述符 -- filed类型或者method的返回值和parameters,type用约定的B,C,D,F,I,J,S,Z,V,[,L等表示,例如 int i的描述符为I, int getSize(String s)的描述符为(java/lang/String)I

    常量池info表

    CONSTANT_Utf8_info表

    表中各项如下

    tag -- u1,CONSTANT_Utf8

    length -- u2,bytes的字节数

    bytes -- u1*length, 字符

    CONSTANT_Integer_info表

    tag -- CONSTANT_Integer_info

    bytes -- u4, 按照高位在前的格式存储int类型值

    CONSTANT_Float_info表

    tag-- CONSTANT_Float_info

    bytes -- u4, 按照高位在前的格式存储float类型值

    CONSTANT_Double_info表

    tag-- CONSTANT_Double_info

    bytes -- u8, 按照高位在前的格式存储double类型值

    CONSTANT_Long_info表

    tag -- CONSTANT_Long_info

    bytes -- u8, 按照高位在前的格式存储long类型值

    CONSTANT_String_info

    tag -- CONSTANT_String_info

    string_infex -- u2,CONSTANT_Utf8_info表的索引

    CONSTANT_Fieldref_info表

    tag -- CONSTANT_Fieldref_info

    class_index -- u2, 声明的字段的类或接口的CONSTANT_Class_info入口的索引

    name_and_type_index -- u2, CONSTANT_NameAndType_info入口的索引,该入口提供了字段的简单名称和描述符

    CONSTANT_Methodref_info表

    tag -- CONSTANT_Methodref_info

    class_index -- 被引用方法的类的CONSTANT_Class_info

    name_and_type_index -- CONSTANT_NameAndType_info入口的索引,该入口提供了方法的简单名称和描述符

    CONSTANT_InterfaceMethod_info表

    tag -- CONSTANT_InterfaceMethod_info

    class_index -- 被引用方法的接口的CONSTANT_Class_info

    name_and_type_index -- 方法的简单名称和描述符

    CONSTANT_NameAndType_info表

    tag -- CONSTANT_NameAndType_info

    name_index -- CONSTATNT_Utf8_info的入口索引,该入口给出了字段或方法的名称

    name_and_type_index -- CONSTATNT_Utf8_info的入口索引,该入口给出了字段或方法的描述符

    field_info表

    class或Interface中声明的字段都会由class文件中的一个名为field_info的可变长度的表描述

    access_flags -- private,public,protect,static,final,volatile,transient标志

    name_index -- 名称的CONSTATNT_Utf8_info入口索引

    descriptior_index -- 描述符的CONSTATNT_Utf8_info入口索引

    attributes_count --

    attributes --

    method_info表

    class或Interface中声明的方法都会由class文件中的一个名为method_info的可变长度的表描述

    access_flags -- private,public,protect,static,final,volatile,native,abstract,synchronized,strictFP标志

    name_index -- 名称的CONSTATNT_Utf8_info入口索引

    descriptior_index -- 描述符的CONSTATNT_Utf8_info入口索引

    attributes_count --

    attributes --

  • 相关阅读:
    3、Python文件操作工具 xlwt 工具
    2、Python文件操作工具 xlrd 工具
    1、关于python第三方工具操作xls和xlsx格式的excel文档选型的吐血经历
    设置python的默认编码方式为utf-8
    Python安装第三方库 xlrd 和 xlwt 。处理Excel表格
    I/O字符流
    I/O字节流
    读写锁实现线程安全缓存
    红黑树理解
    Task异常捕获
  • 原文地址:https://www.cnblogs.com/zengyou/p/2554731.html
Copyright © 2020-2023  润新知