java文件格式_Java Class文件格式详解
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文件格式详解相关推荐
- java class _Java Class文件详解
ClassFile { u4 magic; //模数 u2 minor_version; ...
- java逆向工程_JAVA语言:详解MyBatis逆向工程[Java代码]
本文主要向大家介绍了JAVA语言的MyBatis逆向工程,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 1.什么是mybatis逆向工程 在使用mybatis时需要程序员自己编写sq ...
- serializable java 规则_Java 序列化Serializable详解(附详细例子)
1.什么是序列化和反序列化 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程. 2.什么情况下需要序 ...
- java语言与其他语言的区别是_Java语言特点有哪些?Java区别其他语言特点详解
Java语言特点有哪些?Java区别其他语言特点详解 Java是目前最流行的编程语言之一,那你知道为什么Java这么火吗?相比其他编程语言,Java的特点又有哪些呢?跟着小编一起来了解一下吧. 一.简 ...
- java中的进制输出转换_Java I/O : Java中的进制详解
作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...
- java list用法_Java List 用法详解及实例分析
Java List 用法详解及实例分析 Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺 ...
- java基础与案例开发详解 pdf下载_Java基础与案例开发详解(张孝祥) pdf_IT教程网...
资源名称:Java基础与案例开发详解(张孝祥) pdf 第1.2和3章介绍Java环境的安装配置,Java程序的开发过程和Java语言的基础语法. 第4章介绍数组和常用算法的相关知识. 第5章和6章介 ...
- Java虚拟机之垃圾回收详解一
Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...
- JVM调优系列--Java命令选项(参数)--大全/详解/常用
原文网址:JVM调优系列--Java命令选项(参数)--大全/详解/常用_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java的java命令用法,包括:常用用法.选项大全. J ...
- Java中的static关键字详解
** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...
最新文章
- Diango REST framework 视图继承图
- 微信小程序服务器开小差了,微信小程序wx.request请求封装
- 西门子主程序调用子程序_S7200Smart 子程序局部变量使用教程
- 晶振波形不是正弦波_晶振的分类及其应用
- 百度知道回答html代码,html - JavaScript面试题:页面编码和被请求的资源编码 ,如果不一致,如何处理?百度上搜到一个答案,不知道是否正确?...
- Raspberry Config.txt 介绍
- kindeditor 下图片链接取消边框
- LeetCode(1029)——两地调度(JavaScript)
- 注意!下个月开始 GitHub 新建存储库的默认分支就不叫“master”了!
- topaz全家桶中文_apache 开源项目全家桶 2020年12月中文介绍
- mysql数据库自学_MySQL数据库自学
- 小学科学作业计算器c语言,怎样用C实现一个简单科学计算器
- 数据结构c字符串操作语言版本
- Logistic Regression - IBM 员工离职预测
- cleanmymac废纸篓垃圾桶模块主要功能介绍
- INSERT插入表记录
- BT 电驴 电骡 FTP下载及找片技巧
- 一文详解SLAM的主要任务和开源框架
- 右键excel 文件后文件夹卡死,或打开Excel后文件所在的文件夹卡死
- Camtasia Studio 9录制高清、超清视频教程