Class文件结构(更新中)
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文件结构(更新中)相关推荐
- JAVA面试大全(持续更新中...)
本文旨在收集Java面试过程中出现的问题,力求全面,仅作学习交流,欢迎补充,持续更新中-,部分段落选取自网上,部分引用文章已标注,部分已记不清了,如侵权,联系本人 Java基础 1.面向对象的概述 面 ...
- 【数据库】【NCRE】NCRE三级数据库技术选择题历年真题汇编(更新中)
温馨提示:请不要在任何禁用通讯设备的场合阅读本文章. 目录 2015年-2 2015年-1 2014年9月 2014年3月 2013年9月 2013年3月 2012年9月 2012年3月-2 2015 ...
- vue通用后台管理系统(保姆级)--持续更新中
配合目录使用更加友好哦,文章中分享的项目搭建是完全从0-1搭建,完全适用于小白,可用于vue练手项目,目前还在持续更新中,本篇文章不会断更,因工作原因,只能晚上给大家更新,感觉还行的可以给个关注或者收 ...
- linux运维常用命令一句话(持续更新中)
整理收集一些Linux运维管理.系统管理的常用命令,太多了记不住,只能记录下来方便日后查看.也可以和大家分享.如果你有好的一句话命令也贴出来吧.本文持续更新中. 1.linux启动过程 开启电源 -- ...
- 深入理解JS的面向对象(更新中)
面向对象是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构.CAD技术.人工智能等领域.面向对象是一种对现实世 ...
- .NET Core微服务之路:不断更新中的目录 (v0.42)
原文:.NET Core微服务之路:不断更新中的目录 (v0.42) 微服务架构,对于从事JAVA架构的童鞋来说,早已不是什么新鲜的事儿,他们有鼎鼎大名的Spring Cloud这样的全家桶框架支撑, ...
- 初学Oracle的笔记(2)——基础内容(实时更新中..)
续 初学Oracle的笔记(1)--基础内容(实时更新中..) 1.oracle中创建一张表,写法与sql server中的一样. SQL> create table Course 2 ( cn ...
- db2dual_DB2常用SQL的写法(持续更新中...)
DB2常用SQL的写法(持续更新中...) -- Author: lavasoft -- Date : 2006-12-14 -- 创建一个自定义单值类型 create distinct typ ...
- linux的网络命令整理 更新中
linux的网络命令整理 更新中 1.安装包: net-tools 主要命令: netstat , ifconfig , route , iptunnel iproute 主要命令: ss , ip ...
- 【STM32-V7】STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2020-07-22)
[STM32-V7]STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2020-07-22) 参考文章: (1)[STM32-V7]STM32H743XIH6开 ...
最新文章
- mysql中utf8_bin、utf8_general_ci、utf8_general_cs编码区别
- P2888 [USACO07NOV]牛栏Cow Hurdles(Floyd算法)
- 二叉树(14)----由前序遍历和中序遍历重建二叉树,递归方式
- IntelliJ Idea工具使用
- UNIX(进程间通信):04---孤儿进程
- python头文件库_跟老齐学Python之不要红头文件(1)
- 写得好 git 提交信息
- 安装R软件(R、studio)的安装包下载官网和教程
- 个人设计web前端大作业——HTML+CSS华为官网首页
- echarts 闪光_echarts legend 图例文字闪烁显示
- Android自定义View使用总结
- OBCE首位认证 实力与颜值并存 | 90后技术宅郑皓嘉的通关之路
- 7-69 战争地图(邻接矩阵和邻接表版本) (25 分)
- 在HTML中实现两个div并排显示
- 如何用手机语音助手控制电脑
- mysql没开启binlog恢复删除表_无全量备份、未开启binlog日志,利用percona工具恢复delete的数据...
- html日期控件默认设置为当天日期
- 初入门的C++小语法
- 嵌套循环练习:打印三角,九九乘法表,质数,质数优化
- 在暑期实习时需要注意些什么
热门文章
- linux centos安装git,centos下两种方法安装git–转载
- java可视化界面视频_java中的可视化界面
- Windows 7 上安装 Mapnik
- adapter为null_软件设计精要之——适配器(Adapter)模式
- /usr/lib/python2.6/site-packages/pycurl.so: undefined symbol: CRYPTO_set_locking_callback
- window.onload,body onload=function(), document.onreadystatechange, httpRequest.onreadystatechang
- java中的数组、队列、堆栈
- Scala 中的文件操作
- Elasticsearch对垒8大竞品技术
- java多线程系列:通过对战游戏学习CyclicBarrier