您的位置:首页 > 编程语言 > Java开发

深入了解Java虚拟机中字段表集合,和在class中如何组织

2017-06-13 21:40 423 查看
今天看了一个大牛写的博客,了解了字段是如何在class中组织的和如何赋值的,也就是class中字段的机制

先学习几个名词吧

字段表:存储一个字段的信息的数据结构(你就想象成一个容器)

字段表集合:多个字段表组合在一起形成集合

字段表包括什么内容呢?

访问标志,名称索引,描述索引,属性计数器【如果属性计数器大于等于1,就有 ConstantValue[属性名称索引,属性长度,常量值索引]   这个数据结构】

访问标志:就是字段的修饰符,2个字节表示,会生成一个数值如0x000A,与之对应的有一个 ()特征值,标志符)表,与特征值求与(&)运算,结果为1,就有这个标志符

名称索引和描述索引:都是2字节,存储常量池中某常量的地址,名称---->字段名字,描述---->类型

我们先讲讲字段的赋值再将,属性计数器

有些时候我们会对一个字段直接赋值:如:private int a = 10;

这时就分为静态和非静态的了

1.静态:在构造方法中赋值

2.非静态:A.在静态构造方法中赋值B.在ConstantValue属性进行赋值

用ConstantValue属性进行赋值的条件:被static和final修饰,并且是基本类型或String类型,那么不被final修饰或者不是基本类型或String就在构造方法中赋值,

现在开始讲属性计数器:

  属性计数器大于0的天是有字段是 :被static和final修饰,并且是基本类型或String类型

就会用ConstantValue属性赋值:第一个属性名称一般都是“ConstantValue”字符串代表是ConstantValue类型

再讲一个知识点,其实class中的类型和java中数据类型不一样,有一个(数据类型和class类型)表:



class文件将字段名称和field字段的数据类型表示作为字符串存储在常量池中。在field_info结构体中,紧接着访问标志的,就是字段名称索引和字段描述符索引,它们分别占有两个字节,其内部存储的是指向了常量池中的某个常量池项的索引,对应的常量池项中存储的字符串,分别表示该字段的名称和字段描述符

参考:http://m.blog.csdn.net/u010349169/article/details/41046443

--------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐