字段在class文件中的存在形式——FieldInfo
每个字段(Field)都有field_info结构所定义,一个class文件中,不会有两个字段同时具有相同的名字和描述符


name_index:值为一个整数(常量池表中的有效索引),例如name_index为4,那么name_index表示常量池表中索引为4处的常量(必须为Utf8_info结构),用来表示这个字段的名称(非全限定名)
descriptor_index:值为一个整数(常量池表中的有效索引),例如descriptor_index为5,那么descriptor_index表示常量池表中索引为5处的常量(必须是Utf8_info结构),用来表示这个字段的描述符
attributes_count:字段中有attributes_count个属性
attribute_info attributes[attributes_count]:一个attribute_info数组attributes,用来存储attributes_count个attribute_info结构
用代码实现field_info结构
public class FieldInfo {
private short accessFlags;
private String name;
private String descriptor;
private AttributeInfo[] attributes;
public FieldInfo(ConstantPool constantPool, Supplier<AttributeInfo> attributeBuilder, ByteBuffer in) {
this.accessFlags = in.getShort();
short nameIndex = in.getShort();
short descriptorIndex = in.getShort();
short attributesCount = in.getShort();//fieldinfo中存储着attribute
this.attributes = new AttributeInfo[attributesCount];
for (int i = 0; i < attributesCount; i++) {
this.attributes[i] = attributeBuilder.get();//获得属性
}
this.name = ((UTF8Info) constantPool.get(nameIndex)).getString();
this.descriptor = ((UTF8Info) constantPool.get(descriptorIndex)).getString();
}
用代码来实现的时候,并没有给field_info实例变量name_index,因为name_index的最终目的是从常量池中获取相对应的名字,所以安排的实力变量为name
decriptor同理
字段在class文件中的存在形式——FieldInfo的更多相关文章
- 《Java虚拟机原理图解》1.4 class文件中的字段表集合--field字段在class文件中是怎样组织的
0.前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述 ...
- 方法在class文件中的存在形式MethodInfo
一个方法对由一个method_info结构所定义.一个class文件中,不会同时出现两个方法同时有相同的名称和描述符 method_info结构如下 参考Field 代码实现 public class ...
- Python脚本连接数据库读取特定字段保存在文件中
从Script表中取出Description字段作为文件名,并按协议将脚本归位相同的文件夹,取TestScript字段的内容写入文件 import MySQLdb import sys import ...
- 转载---class文件中的字段表集合--field字段在class文件中是怎样组织的
写的太好了! https://blog.51cto.com/1459294/1932331
- 第三天,爬取伯乐在线文章代码,编写items.py,保存数据到本地json文件中
一. 爬取http://blog.jobbole.com/all-posts/中的所有文章 1. 编写jobbole.py简单代码 import scrapy from scrapy. ...
- 《Java虚拟机原理图解》1.5、 class文件中的方法表集合--method方法在class文件中是怎样组织的
0. 前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描 ...
- PHP将数据写入指定文件中
首先创建一个空的txt文件,这里我们创建了一个1.txt的空文件. 第一种方法:fwrite函数 <?php $file=fopen('1.txt','rb+'); var_dump(fwrit ...
- shell awk读取文件中的指定行的指定字段
1.awk功能和实用形式 awk指定读取文件中的某一行的某个字段 awk 可以设置条件来输出文件中m行到n行中每行的指定的k字段,使用格式如下 awk 'NR==m,NR==n {pr ...
- divmod(a,b)函数是实现a除以b,然后返回商与余数的元组、eval可以执行一个字符串形式的表达式、exec语句用来执行储存在字符串或文件中的Python语句
#!/usr/bin/env python a = 10/3 print(a) #divmod计算商与余数 r = divmod(10001,20) print(r) #eval可以执行一个字符串形式 ...
随机推荐
- PHP in_array() 函数
实例 在数组中搜索值 "Runoob" ,并输出一些文本: <?php $sites = array("Google", "Runoob&quo ...
- Python语言及其应用 中文pdf完整版|网盘下载内附提取码
点击此处下载提取码:7cvm <Python语言及其应用>介绍Python 语言的基础知识及其在各个领域的具体应用,基于新版本3.x.书中首先介绍了Python 语言的一些基本知识,然后介 ...
- windows:进程查杀
windows平台中,某些进程做了各种保护,比如hook了terminateProcess,又或者注册了进程终止函数的回调.当调用这些API或任务管理器终止该进程时,会被绕过,典型如某些杀毒软件,怎么 ...
- K近邻算法(一)
K 近邻算法思想: 寻找该点周围最近的K个点.根据这K 个点的类别来判断该点的类别: 核心: 数据归一化.(在必要的时候必须进行数据归一化处理,防止某一特征在计算数据时占比较重) 计算欧拉距离 . 使 ...
- Caffe CuDNN版本与环境不同导致make错误
1.将./include/caffe/util/cudnn.hpp 换成最新版的caffe里的cudnn的实现,即相应的cudnn.hpp. 2.将./include/caffe/layers里的,所 ...
- URLDecoder异常解决方法
URLDecoder对参数进行解码时候,代码如: URLDecoder.decode(param,"utf-8"); 有时候会出现类似如下的错误: URLDecoder异常Ille ...
- .NetCore 配合 Gitlab CI&CD 实践 - 单体项目
前言 上一篇博文 .NetCore 配合 Gitlab CI&CD 实践 - 开篇,主要简单的介绍了一下 GitLab CI 的持续集成以及持续部署,这篇将通过 GitLab CI 发布一个 ...
- 9、Java 常用类 Math,Number子类,String,Character
本小节主要介绍一些如何去使用Java提供的类如何去使用?如何在实战中使用?从来没有用过的如何去学习? 分享一下发哥的学习方法? 1.针对性的学习 在理解自己的需求或者要做某一块的内容后,有针对性,选择 ...
- java标识符、关键字、基本数据类型
一 标识符与关键字 1.标识符 在程序中用于定义名称的都为标识符,如文件名称.类名称.方法名称或变量名称等, 在Java中标识符的定义格式由字母.数字._(下划线),$所组成,不能以数字开头, 不能是 ...
- Django-Model模型Field选项中null和blank的区别
- Option-**blank**设置为True时代表填写表单的时候可以为空,即在save()执行时此字段可以没有,如果字段没有就在数据库上存储一个空字符串: - Option-**null**设置 ...