Class文件是一组以8位字节为单位的二进制流,当遇见需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。

格式,采用伪结构,只有两种数据结构:无符号数和表。

无符号数:

表:由多个无符号数或其他表作为数据项构成的复合数据类型,整个Class文件本质上就是一张表

数据项:

魔数(magic)

Class文件的头4个字节,作用是确定此文件是否为虚拟机可接受的class文件

次版本号(Minor Version)

5、6字节

主版本(Major Version)

7、8字节

常量池容量计数值(constant_pool_count)

2个字节

常量池(constant_pool)

大小不固定

字面量

Java语言层面的常量:文本字符串、final

符号引用

编译原理层面的概念

类和接口的全限定名(引入的类和接口,而不是此类或接口的)

字段的名称和描述符(描述符即修饰符)

方法的名称和描述符

java在进行javac编译时,没有“连接”操作,而是在虚拟机加载class文件时动态连接,也就是说class文件不会包含各个方法、字段的最终内存布局信息。

访问标志(access_flag)

2个字节

类或者接口层次的访问信息,如这个class是类还是接口,是否是public

类索引(this_class)

u2

确定此类全限定名(通过索引能查出全限定名)

父索引(super_class)

u2

确定父类全限定名

接口计数器(interfaces_count)

u2

代表接口索引表的容量

接口索引集合(interfaces)

u2类型数据集合

此类实现了那些接口,按照implements后的接口顺序从左到右排列

字段表集合(field_info)

接口或类中的变量的描述,包括类级变量和实例级变量。

内容:

作用域(public、private、protected)、实例变量还是类变量、可变性、并发可见性、字段数据类型、字段名称

对于修饰符,属于布尔值,用标志位表示

对于字段名称,其实是通过索引引用常量池中的常量的简单名称

方法表集合

属性表集合

转载于:https://www.cnblogs.com/yanze/p/9811478.html

Class文件结构(更新中)相关推荐

  1. JAVA面试大全(持续更新中...)

    本文旨在收集Java面试过程中出现的问题,力求全面,仅作学习交流,欢迎补充,持续更新中-,部分段落选取自网上,部分引用文章已标注,部分已记不清了,如侵权,联系本人 Java基础 1.面向对象的概述 面 ...

  2. 【数据库】【NCRE】NCRE三级数据库技术选择题历年真题汇编(更新中)

    温馨提示:请不要在任何禁用通讯设备的场合阅读本文章. 目录 2015年-2 2015年-1 2014年9月 2014年3月 2013年9月 2013年3月 2012年9月 2012年3月-2 2015 ...

  3. vue通用后台管理系统(保姆级)--持续更新中

    配合目录使用更加友好哦,文章中分享的项目搭建是完全从0-1搭建,完全适用于小白,可用于vue练手项目,目前还在持续更新中,本篇文章不会断更,因工作原因,只能晚上给大家更新,感觉还行的可以给个关注或者收 ...

  4. linux运维常用命令一句话(持续更新中)

    整理收集一些Linux运维管理.系统管理的常用命令,太多了记不住,只能记录下来方便日后查看.也可以和大家分享.如果你有好的一句话命令也贴出来吧.本文持续更新中. 1.linux启动过程 开启电源 -- ...

  5. 深入理解JS的面向对象(更新中)

    面向对象是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构.CAD技术.人工智能等领域.面向对象是一种对现实世 ...

  6. .NET Core微服务之路:不断更新中的目录 (v0.42)

    原文:.NET Core微服务之路:不断更新中的目录 (v0.42) 微服务架构,对于从事JAVA架构的童鞋来说,早已不是什么新鲜的事儿,他们有鼎鼎大名的Spring Cloud这样的全家桶框架支撑, ...

  7. 初学Oracle的笔记(2)——基础内容(实时更新中..)

    续 初学Oracle的笔记(1)--基础内容(实时更新中..) 1.oracle中创建一张表,写法与sql server中的一样. SQL> create table Course 2 ( cn ...

  8. db2dual_DB2常用SQL的写法(持续更新中...)

    DB2常用SQL的写法(持续更新中...) -- Author: lavasoft -- Date  :  2006-12-14 -- 创建一个自定义单值类型 create  distinct typ ...

  9. linux的网络命令整理 更新中

    linux的网络命令整理 更新中 1.安装包: net-tools 主要命令: netstat , ifconfig , route , iptunnel iproute 主要命令: ss , ip ...

  10. 【STM32-V7】STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2020-07-22)

    [STM32-V7]STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2020-07-22) 参考文章: (1)[STM32-V7]STM32H743XIH6开 ...

最新文章

  1. mysql中utf8_bin、utf8_general_ci、utf8_general_cs编码区别
  2. P2888 [USACO07NOV]牛栏Cow Hurdles(Floyd算法)
  3. 二叉树(14)----由前序遍历和中序遍历重建二叉树,递归方式
  4. IntelliJ Idea工具使用
  5. UNIX(进程间通信):04---孤儿进程
  6. python头文件库_跟老齐学Python之不要红头文件(1)
  7. 写得好 git 提交信息
  8. 安装R软件(R、studio)的安装包下载官网和教程
  9. 个人设计web前端大作业——HTML+CSS华为官网首页
  10. echarts 闪光_echarts legend 图例文字闪烁显示
  11. Android自定义View使用总结
  12. OBCE首位认证 实力与颜值并存 | 90后技术宅郑皓嘉的通关之路
  13. 7-69 战争地图(邻接矩阵和邻接表版本) (25 分)
  14. 在HTML中实现两个div并排显示
  15. 如何用手机语音助手控制电脑
  16. mysql没开启binlog恢复删除表_无全量备份、未开启binlog日志,利用percona工具恢复delete的数据...
  17. html日期控件默认设置为当天日期
  18. 初入门的C++小语法
  19. 嵌套循环练习:打印三角,九九乘法表,质数,质数优化
  20. 在暑期实习时需要注意些什么

热门文章

  1. linux centos安装git,centos下两种方法安装git–转载
  2. java可视化界面视频_java中的可视化界面
  3. Windows 7 上安装 Mapnik
  4. adapter为null_软件设计精要之——适配器(Adapter)模式
  5. /usr/lib/python2.6/site-packages/pycurl.so: undefined symbol: CRYPTO_set_locking_callback
  6. window.onload,body onload=function(), document.onreadystatechange, httpRequest.onreadystatechang
  7. java中的数组、队列、堆栈
  8. Scala 中的文件操作
  9. Elasticsearch对垒8大竞品技术
  10. java多线程系列:通过对战游戏学习CyclicBarrier