博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(十六)字段表集合
阅读量:6163 次
发布时间:2019-06-21

本文共 855 字,大约阅读时间需要 2 分钟。

一、概念

类索引之后便是字段表集合,如下标,紧跟类索引之后的是fields_count(字段数量)和fileds字段表,各占两个字节。

 

 

 

二、案例

  •  编写一个类,该类有多个字段。如下代码:
public class Test {    private int a;        public byte b;        public static Object obj;        public Object[] objs;}
  • 编译后,打开字节码文件如下图:

  • 由上图可知,fields_count(字段数量)=0x0004 = 4 表示该类有4个字段。
  • 紧跟fields_count后是每个字段的字段表,每个字段的字段表如下图,紧跟fields_count的也就是access_flags(字段的访问标志符)=0x0002,对比下图(字段访问标志图)可知该字段的权限为private
  • 接着是name_index(字段名称)=0x0004=4,用javap查看常量池下图(常量池图)可知#4=a ,表示该字段的名称为“a”
  • 接着是descriptor_index(字段类型)=0x0005=5,查看查看常量池下图(常量池图)可知#5=I,查看下图标识符含义表可知I代表"int",
  • 该字段最后是属性表数量=0x0000=0,所以为空。
  • 到此为止可知第一个字段的结构为:private int a;
  • 接下来的字段 public byte b; public static Object obj;  public Object[] objs; 解析步骤如上,值得注意的是,字段类型为对象时,标识符为“L”开头,如 public static Object obj,其字段类型的标识符为“Ljava/lang/Object”.如果字段类型是数组时,标识符以“[”开头。

字段访问标志图:

 常量池图:

标识符含义表:

 

转载于:https://www.cnblogs.com/shyroke/p/9032134.html

你可能感兴趣的文章
FreeSwitch中的会议功能(4)
查看>>
MySQL中创建用户分配权限(到指定数据库或者指定数据库表中)
查看>>
AutoReleasePool 和 ARC 以及Garbage Collection
查看>>
重新想象 Windows 8 Store Apps (9) - 控件之 ScrollViewer 基础
查看>>
乐在其中设计模式(C#) - 提供者模式(Provider Pattern)
查看>>
MVP Community Camp 社区大课堂
查看>>
GWT用frame调用JSP
查看>>
大型高性能ASP.NET系统架构设计
查看>>
insert select带来的问题
查看>>
EasyUI 添加tab页(iframe方式)
查看>>
mysqldump主要参数探究
查看>>
好记心不如烂笔头,ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题...
查看>>
使用addChildViewController手动控制UIViewController的切换
查看>>
Android Fragment应用实战
查看>>
SQL Server查询死锁并KILL
查看>>
内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档。 [问题点数:20分,结帖人wenyang2004]...
查看>>
委托到Lambda的进化: ()=> {} 这个lambda表达式就是一个无参数的委托及具体方法的组合体。...
查看>>
apache 伪静态 .htaccess
查看>>
unity3d 截屏
查看>>
ASP.NET MVC学习之控制器篇
查看>>