编译生成的class文件---字节码内容解析

字节码文件

字节码文件的内容

魔数

魔数用来表示class文件,由于文件的后缀名可以随意的修改,所以使用魔数来标识一种文件更具安全性
每个class文件的前四个字节(u4)称为魔数,作用:确定这个文件是一个能被虚拟机接受的class文件;
class 文件的魔数是:0xCAFEBABY

class文件的版本号

紧接着魔数后面的就是Class文件的版本号,第5和第6 是次版本号,7,8是主版本号  java 的初始版本号从 45 开始,
每一个大版本出来后主版本号加1,高版本的JDK能向下兼容低版本的Class文件,但是不能运行以后版本的Class文件
注意:虚拟机拒绝执行超过其版本的Class文件---(jdk1.7--主版本51--1.8--主版本52)	

常量池

主版本后面就是常量池入口
常量池:相当于class文件的资源仓库,与其他项目关联最多的数据类型,也是占用class文件空间最大的数据项目之一
常量池入口:u2类型的数据,代表常量池容量计数值,这个计数值从1开始(只有常量池计数从1开始。0是预留给没有引用任何一个常量的项目)
常量池中主要存放内容:字面量和符号引用
字面量:如文本字符串,声明为final的常量值
符号引用(编译原理方面):
        1.类和接口的全限定名称
        2.字段名称和描述符
        3.方法的名称和描述符
常量池中的每一个常量都是一个表,1.7一共有14中表,表的共同特点第一位是一个u1类型的标志位,代表当前常量是属于那种类型
注意:Java中程序如果定义了超过64KB的变量或者方法名,将会无法编译
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值