magic[4字节] 魔数,用来判断是否可以被虚拟机使用。固定值为0xCAFEBABE(咖啡宝贝)

minor_version[2字节] 次版本号

major_version[2字节] 主版本号,低版本的jdk无法执行高版本的class文件。

constant_pool_count[2字节] 常量池里的项目个数

constant_pool 常量池里每一个项目类型都用一个tag标示。从1开始取值,比如取值为1时,表示info里存放的是utf8的字符串

tag[1字节] 不同的取值,决定了其下info的结构不同

info

access_flags[2字节] 类的访问标识位,用来标识类是否具有pulbic/abstract/interface/final等修饰符。用其中的bit位标识是否存在。例如,如果是public的class,其值为0x0001

this_class[2字节] 两个字节的数值,指向常量池里的某一个项目。这里指向的是当前类的全名称

super_class[2字节] 指向常量池里的当前类的父类全名称

interfaces_count[2字节] 当前类实现的接口个数

interfaces 每一个指向常量池里的接口的全名称

fields_count[2字节] 当前类的成员变量个数

fields 成员变量信息

access_flags[2字节] 成员变量的访问标识,与上边access_flags相似

name_index[2字节] 指向常量池里当前字段的名字

desc_index[2字节] 指向常量池里当前字段的描述。例如字符串类型对应的描述是'Ljava.lang.String;'

attribute_count[4字节] 字段的属性表个数,跟类的属性表类似。在下面介绍

attributes 存放字段的属性信息

methods_count[2字节] 当前类的成员方法个数

mehtods 成员方法信息

access_flags[2字节] 成员方法的访问标识,与上边access_flags相似

name_index[2字节] 指向常量池里当前方法的名字

desc_index[2字节] 指向常量池里当前方法的签名。比如 public String test(Object o) 方法对应描述是(Ljava.lang.Object;)Ljava.lang.String;

attributes_count[4字节] 方法的属性表个数,跟类的属性表类似。在下面介绍

attributes 存放方法的属性信息,最重要的属性就是Code,存放了方法的字节码指令

attributes_count[2字节] 类的属性表个数

attributes 类的属性信息

attribute_name_index[2字节] 指向常量池里属性的名称

attribute_length[4字节] 下边info内容的长度

info 属性的内容。不同的属性,内容结构不同

以Code属性表为例,其结构如下

attribute_name_index[2字节] 指向常量池里的Code字符串

attribute_length[4字节] 该属性的长度

max_stack[2字节] 当前方法操作数栈的最大深度

max_locals[2字节] 存放局部变量所需要的空间个数

code_length[4字节] 源码编译后字节码指令的长度

code 字节码指令

exception_table_length 异常表个数

exception_table 异常表

attributes_count 当前属性下的属性个数

attributes

从上边的结构我们不难看出,其实Java class文件的各是还是比较简洁的。其中的attributes可以根据需要随时添加,用来满足Jvm后期发展的需求。

java文件格式_Java Class文件格式详解相关推荐

  1. java class _Java Class文件详解

    ClassFile { u4 magic;                                 //模数 u2 minor_version;                         ...

  2. java逆向工程_JAVA语言:详解MyBatis逆向工程[Java代码]

    本文主要向大家介绍了JAVA语言的MyBatis逆向工程,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 1.什么是mybatis逆向工程 在使用mybatis时需要程序员自己编写sq ...

  3. serializable java 规则_Java 序列化Serializable详解(附详细例子)

    1.什么是序列化和反序列化 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程. 2.什么情况下需要序 ...

  4. java语言与其他语言的区别是_Java语言特点有哪些?Java区别其他语言特点详解

    Java语言特点有哪些?Java区别其他语言特点详解 Java是目前最流行的编程语言之一,那你知道为什么Java这么火吗?相比其他编程语言,Java的特点又有哪些呢?跟着小编一起来了解一下吧. 一.简 ...

  5. java中的进制输出转换_Java I/O : Java中的进制详解

    作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...

  6. java list用法_Java List 用法详解及实例分析

    Java List 用法详解及实例分析 Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺 ...

  7. java基础与案例开发详解 pdf下载_Java基础与案例开发详解(张孝祥) pdf_IT教程网...

    资源名称:Java基础与案例开发详解(张孝祥) pdf 第1.2和3章介绍Java环境的安装配置,Java程序的开发过程和Java语言的基础语法. 第4章介绍数组和常用算法的相关知识. 第5章和6章介 ...

  8. Java虚拟机之垃圾回收详解一

    Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...

  9. JVM调优系列--Java命令选项(参数)--大全/详解/常用

    原文网址:JVM调优系列--Java命令选项(参数)--大全/详解/常用_IT利刃出鞘的博客-CSDN博客 简介 说明        本文介绍Java的java命令用法,包括:常用用法.选项大全. J ...

  10. Java中的static关键字详解

    ** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...

最新文章

  1. Diango REST framework 视图继承图
  2. 微信小程序服务器开小差了,微信小程序wx.request请求封装
  3. 西门子主程序调用子程序_S7200Smart 子程序局部变量使用教程
  4. 晶振波形不是正弦波_晶振的分类及其应用
  5. 百度知道回答html代码,html - JavaScript面试题:页面编码和被请求的资源编码 ,如果不一致,如何处理?百度上搜到一个答案,不知道是否正确?...
  6. Raspberry Config.txt 介绍
  7. kindeditor 下图片链接取消边框
  8. LeetCode(1029)——两地调度(JavaScript)
  9. 注意!下个月开始 GitHub 新建存储库的默认分支就不叫“master”了!
  10. topaz全家桶中文_apache 开源项目全家桶 2020年12月中文介绍
  11. mysql数据库自学_MySQL数据库自学
  12. 小学科学作业计算器c语言,怎样用C实现一个简单科学计算器
  13. 数据结构c字符串操作语言版本
  14. Logistic Regression - IBM 员工离职预测
  15. cleanmymac废纸篓垃圾桶模块主要功能介绍
  16. INSERT插入表记录
  17. BT 电驴 电骡 FTP下载及找片技巧
  18. 一文详解SLAM的主要任务和开源框架
  19. 右键excel 文件后文件夹卡死,或打开Excel后文件所在的文件夹卡死
  20. Camtasia Studio 9录制高清、超清视频教程

热门文章

  1. WCF系列(三) -- WCF配置文件注释 【转】
  2. golang实现图片上传
  3. spring与springBoot不同之处
  4. 贝塞尔曲线 花束直播点赞效果
  5. 牛客 [编程题] 回文解码
  6. 不知道当前谁激活键盘时的隐藏键盘方法
  7. 设计模式之美:Facade(外观)
  8. Androidの多线程之更新ui(AsyncTask)
  9. 无法relay信件处理一例
  10. ASP程序快速生成Excel文件