JVM虚拟机-Class文件之属性表集合
一、概述
在class文件中,属性表集合包括Java虚拟机预先规范定义的属性以及用户自定义的属性,对于用户自定义的属性,虚拟机加载的时候会自动忽略掉。class文件、字段表、方法表都可以携带自己的属性表集合,便于描述某些场景专有的信息。
二、组成
虚拟机中预定义的属性有:
属性名称 | 使用位置 | 含义 |
Code | 方法表 | Java代码编译成的字节码指令 |
ConstantValue | 字段表 | final关键字定义的常量池 |
Deprecated | 类,方法,字段表 | 被声明为deprecated的方法和字段 |
Exceptions | 方法表 | 方法抛出的异常 |
EnclosingMethod | 类文件 | 仅当一个类为局部类或者匿名类是才能拥有这个属性,这个属性用于标识这个类所在的外围方法 |
InnerClass | 类文件 | 内部类列表 |
LineNumberTable | Code属性 | Java源码的行号与字节码指令的对应关系 |
LocalVariableTable | Code属性 | 方法的局部便狼描述 |
StackMapTable | Code属性 | JDK1.6中新增的属性,供新的类型检查检验器检查和处理目标方法的局部变量和操作数有所需要的类是否匹配 |
Signature | 类,方法表,字段表 | 用于支持泛型情况下的方法签名 |
SourceFile | 类文件 | 记录源文件名称 |
SourceDebugExtension | 类文件 | 用于存储额外的调试信息 |
Synthetic | 类,方法表,字段表 | 标志方法或字段为编译器自动生成的 |
LocalVariableTypeTable | 类 | 使用特征签名代替描述符,是为了引入泛型语法之后能描述泛型参数化类型而添加 |
RuntimeVisibleAnnotations | 类,方法表,字段表 | 为动态注解提供支持 |
RuntimeInvisibleAnnotations | 表,方法表,字段表 | 用于指明哪些注解是运行时不可见的 |
RuntimeVisibleParameterAnnotation | 方法表 | 作用与RuntimeVisibleAnnotations属性类似,只不过作用对象为方法 |
RuntimeInvisibleParameterAnnotation | 方法表 | 作用与RuntimeInvisibleAnnotations属性类似,作用对象哪个为方法参数 |
AnnotationDefault | 方法表 | 用于记录注解类元素的默认值 |
BootstrapMethods | 类文件 | 用于保存invokeddynamic指令引用的引导方式限定符 |
属性表的结构attribute_info
attribute_info{attribute_name_index//属性的名称索引(指向常量池)2个字节attribute_length//属性长度 4个字节info//有attribute_length个字节属性值
}
三、常见属性介绍
Code属性
Exceptions属性
LineNumberTable属性
LocalVariableTable属性
SourceFile属性
ConstantValue属性
InnerClass属性
属性表这部分内容比较多,也比较复杂,暂时先记录到这里。
参考资料:
- https://www.cnblogs.com/lrh-xl/p/5351182.html
- https://blog.csdn.net/xiaoqiu_cr/article/details/86774074
- https://blog.csdn.net/qq_38526573/article/details/88541241
JVM虚拟机-Class文件之属性表集合相关推荐
- JVM虚拟机-Class文件之方法表集合
一.概述 方法表集合与属性表集合的结构类似,是对方法的修饰符.返回类型.方法名.参数个数.参数类型.方法体的描述集合. 方法表集合的结构是一个类似于数组的结构,JVM在对java文件进行编译时,会将类 ...
- JVM虚拟机-Class文件之字段表集合
一.概述 在接口索引集合后面 的就是字段表集合了.字段表(field_info)用于描述接口或者类中声明的变量.字段包括类级变量以及实例级变量,但是不包括在方法内部声明的局部变量. 二.字段表集合的构 ...
- Class文件结构介绍[属性表集合]
属性表 在前面的内容中属性表(attribute_info)已经出现多多次了,在Class文件.字段表.方法表中都可以携带自己的属性集合,用于描述某些场景专有的信息 与class文件中其他的数 ...
- JVM虚拟机-Class文件之常量池
一.常量池的作用 在class文件中的魔数.副版本号.主版本之后,紧接着就是常量池的数据区域了,如下图用红线包括的位置: 常量池可以比喻为Class文件里的资源仓库,它是Class 文件结构中与其他项 ...
- 解决MapGIS 导出shape文件后属性表内容错乱问题
(1)问题描述 使用MapGIS 6.7 的图形处理-文件转换进行MapGIS文件格式转shape文件是会出现转后mapgis文件属性表乱码问题: 如下图所示,属性表中的内容是错乱的: (2)分析原因 ...
- JVM虚拟机-Class文件之类索引、父类索引和接口索引集合
一.概述 前面介绍了class文件,包括魔数.次版本号.主版本号.常量池和访问标志.接下来的就是用于确定这个类的继承关系的类索引(this_class).父类索引(super_class)与接口索引集 ...
- JVM虚拟机-Class文件简介
一.简介 class文件全名称为Java class文件,class文件径打破了C或者C++等语言所遵循的传统,当编译和连接一个C++程序时,所获得的可执行二进制文件只能在指定的硬件平台和操作系统上运 ...
- JVM虚拟机-Class文件之魔数
一.魔数之定义 魔数这个词在不同领域代表不同的含义.在计算机领域,魔数有两个含义,一指用来判断文件类型的魔数:二指程序代码中的魔数,也称魔法值. 大多数情况下,我们都是通过扩展名来识别一个文件的类型的 ...
- JVM虚拟机-Class文件之访问标志
一.访问标志的概念 常量池结束之后,紧接着的两个字节代表访问标志,这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是接口还是类:是否被定义为public类型:是否定义为abstrac ...
最新文章
- input 的read only 和 disable的区别
- R12.1.3 R12.2.X 注册客户化应用
- Eclipse无法打开“Failed to load the JNI shared library”
- php发送get、post请求获取内容的几种方法
- ubuntu下载工具aria2 uGet
- 【剑指 offer】面试题13:机器人的运动范围(Java)
- H5 移动端 获取腾讯地图计算两经纬度的实际距离(可批量)_多地打卡
- android调用web接口,Android调用WebService系列之请求调用
- python items和setdefault函数
- 计算机操作系统教程——分区存储管理
- eclipse中格式自动调整的问题
- 国外创企Emotech获中国投资,助力个性化机器人Olly
- 工业相机与普通相机的区别
- Excel图表导出为图片,最终转为eps矢量图
- SpringCloud之Eureka客户端服务启动报Cannot execute request on any known server解决
- 小白日志——扫灰、加内存条、装系统自己动手丰衣足食
- 2021年了你还不了解新式类与经典类?
- golang性能调优工具pprof的使用
- 扫描文件至服务器,扫描仪扫描至云服务器
- JavaScript-rem布局
热门文章
- ajax成功跨域_自己写的
- 记录C++ Builder 6.0开发过程中的一个linker error
- Android内存管理-SoftReference的使用
- Docker安装及配置镜像加速器
- left join后边跟on...and 和where...and的区别
- maven 连接sqlserver
- 从源码分析RocketMQ系列-start()方法详解
- 智能电饭煲电路图及其原理_变电所的主电路图解析及总降压变电所主电路图解析...
- python设计模式6-适配器模式
- linux消息队列的内核限制