字节码文件

魔数
魔数用来表示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的变量或者方法名,将会无法编译