.class详解
2019-01-26 14:03:47 1 举报
java的class文件的详细解释,帮助您理解《深入理解java虚拟机》这本书
作者其他创作
大纲/内容
没有定义异常,无
increase()方法表记录开始,然后是increase的相关属性表,周而复始上述过程
u2(占2个字节)
u1(占1个字节)
tag
值为10
方法表
魔数,标记此为一个.class文件,即便更改了后缀,也不妨碍JVM识别
u4(占4个字节)
字节码指令,2A-B1
handler_pc
字节码指令的长度,这里是0000 000A,即10,表示接下来的10个字节(2A-B1)都是字节码指令
attribute_length
字段的个数,这里是0001=1
index
length
方法的个数,这里是0002=2,一个是increase(),还有一个是默认的构造方法
code[code_length]
值为7
指向常量池中的#6位置,而#6最终值为\"I\",所以这两位表示字段类型,即Int
start_pc
……
ua(占10个字节)
源代码中没有任何修饰符,因此是0000,如果是public,则为0001,private是0002,参考字段访问标志位表
字段表
指向CONSTANT_NameAndType的索引项,000F=15,即字节码#15
access_flags
type_index
指向常量池中的#8位置,而#8最终值为\"()V\",表示返回类型为void
0007,指向常量池中的#7位置,而#5最终值为\"<init>\",所以这是个构造方法
13=19(十进制),表示该class文件的常量池中有18项常量,索引值为1~18
max_stack
值为9
类索引,0003指的是指向#3的索引项,对照代码表可知,#3最终指向的值是“// main/HelloWorld”
用2字节,表示该类所实现的接口数量,每实现一个接口,这个值就+1.由于该类没有实现任何接口,故该值为0(后面的两个0也是它的一部分)
u6(占6个字节)
attribute_count
二进制字节码
name_index
Java版本号,34换算成十进制为52,即代表JDK的1.8版本
code_length
code_index
其他属性表的长度(循环)
0009=#9,指向Code部分,表示接下来是Code的数据结构
bytes
field_num
exception_table_length
值为1
父类索引,0004指的是指向#4的索引项,对照代码表可知,#4最终指向的值是“// java/lang/Object”
指向常量池中的#5位置,而#5最终值为\"a\",所以这两位表示字段名
属性表的长度
Java代码
操作数栈最大的栈深度,这里是0002 = 2
method_num
异常表的长度,接下来都是异常表的信息,这里没有定义异常,所以是0000
局部变量表所需要的存储空间,这里是0001=1
属性表,由于没有属性,所以是0000
attribute_info
catch_pc
end_pc
max_locals
指向CONSTANT_NameAndType的索引项,0010=16,即字节码#16
0 条评论
下一页