1.class文件结构存放依次为
1.魔数 判断是否可以被虚拟机接受的class文件
2.版本号
3.常量池 主要存放字面量和符号引用;
4.访问标志 用于识别一些类或者接口层次的访问信息 包括:这个class是类还是接口 是否定义为public类型 是否定义为abstract类型等等;
5.类索引 父类索引与接口索引集合,用来确定这个类的继承关系;
6.字段表集合,用于描述接口或者类中声明的变量
7.方法表集合
8.属性表集合
概念名词理解
2. 字面量
百度百科解释: 在计算机科学中, 字面量(literal)是用于表达源代码中一个固定值的表示法(notation). 几乎所有计算机编程语言都具有对基本值的字面量表示, 诸如: 整数, 浮点数以及字符串; 而有很多也对布尔类型和字符类型的值也支持字面量表示; 还有一些甚至对枚举类型的元素以及像数组, 记录和对象等复合类型的值也支持字面量表示法.
很抽象, 举个例子就明白了.
int i = 1;把整数1赋值给int型变量i,整数1就是Java字面量,
String s = "abc";中的abc也是字面量。
3. 符号引用
符号引用以一组符号来描述所引用的目标, 符号可以是任何形式的字面量, 只要使用时能够无歧义的定位到目标即可. 例如, 在Java中, 一个Java类将会编译成一个class文件. 在编译时, Java类并不知道所引用的类的实际地址, 因此只能使用符号引用来代替. 比如org.simple.People类引用了org.simple.Language类, 在编译时People类并不知道Language类的实际内存地址, 因此只能使用符号org.simple.Language来表示Language类的地址.
4. 直接引用
直接引用可以是:
直接指向目标的指针.(个人理解为: 指向方法区中类对象, 类变量和类方法的指针)
相对偏移量. (指向实例的变量, 方法的指针)
一个间接定位到对象的句柄.
我觉得直接引用说白了, 就是程序运行时可以定位到引用的东西(类, 对象, 变量或者方法等)的地址.