我看Java虚拟机(3)---类文件结构
来源:互联网 发布:ncs刷机软件 编辑:程序博客网 时间:2024/04/27 13:31
存储两种数据:无符号数和表。
魔数:4字节,识别文件,后缀是会被改变的,所以识别class文件是靠这四个字节。
版本号:2字节次版本号+2字节主版本号
常量池:2字节常量池中存放数据的个数len+len个常量顺序放置;11种数据类型1-12表示,标号2缺省(具体我也不知道为什么)
访问标志:2字节
类索引,父类索引,接口索引集合:2字节+2字节+若干字节,都索引向常量池的数据
字段数量:2字节
字段表:2字节(访问标志)+2字节(名称)+2字节(描述符)+若干(不重要)。用于描述接口或类中声明的变量。包括类变量(static修饰)和实例变量,不包括方法内部声明的变量(局部变量)。
全限定名:类似“org/example/clazz/TestClass”。
简单名称:没有类型和参数修饰的方法或字段名称。int inc(int a ,int b)和int m分别为inc和m。
描述符:(参数)+返回值。int index(char[] cs , int i )描述符为”([CI)I”
方法数量:2字节
方法表集合:类比字段表。访问标志增加,比如synchronized,abstract等。
属性表集合:主要code,存储方法指令字节码+其他属性。示例:
public int inc(){ int x; try{ x = 1; return x; }catch(Exception e){ x = 2; return x; }finally{ x = 3; }}
正常和异常返回值各式什么?答案:1,2;
以正常执行为例,虚拟机会这样执行,在操作数栈中给x赋值1,将该值的一个副本放到局部变量表中,finally修改操作数栈的x,但并不会影响局部变量的x值,当要执行返回指令时,操作数栈读入局部变量的1到栈顶,返回1。异常情况类同。
为什么字段表和方法表前面都有2字节的表述数量的字段,而类前面没有?
答:因为一个class文件只有一个类,而字段和方法数量不确定。
后面章节将会根据图:
一步一步分析讲解,前面算静态的,后面就是动态讲解了。
- 我看Java虚拟机(3)---类文件结构
- 我看Java虚拟机(0)
- 我看Java虚拟机(5)---虚拟机加载机制
- 我看Java虚拟机(6)---虚拟机字节码执行
- java虚拟机随手笔记(5)java类文件结构
- 深入理解java虚拟机-读书笔记3-类文件结构
- JAVA虚拟机入门(1)---------类文件结构(上)
- JAVA虚拟机入门(1)---------类文件结构 (下)
- 深入理解Java虚拟机----(五)类文件结构
- 深入java虚拟机(二)--Class类文件结构
- 初识Java虚拟机(5)类文件结构
- 深入理解java虚拟机(三)----类文件结构
- 深入理解JAVA虚拟机(三):类文件的结构
- 深入Java虚拟机笔记(三):类文件结构
- 深入理解Java虚拟机(第六章):类文件结构
- 深入理解java 虚拟机类文件结构
- java虚拟机Class类文件的结构
- 《深入理解Java虚拟机》类文件结构
- 在程序里设置加载网页
- java基础随笔-for each对于二维数组的处理
- hdu 1151 最小覆盖路径算法证明
- MySQL事务隔离级别详解
- Aptana简介与安装及其firebug的安装
- 我看Java虚拟机(3)---类文件结构
- BestCoder Round #64 (div.2) 1002 and 1003
- 野指针产生原因及解决办法
- [Sort]选择排序
- 趣学Python-教孩子学编程--第六章
- (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
- 交叉编译和交叉调试环境的搭建及使用
- Android-SQLite3_1-下载和安装SQLite
- Mac Os X Yosemite 10.10.5 配置apache,php,mysql