lengh表示的是名称的长度,u2表示的是两个字节的无符号整数,最大值为65535.
代码中怎么体现出来
写一个简单的例子
/**
* FileName : TestConstantPool.java
* Created by zongpengq on 9/21/2018.
*/
public class TestConstantPool {
static int intData;
static boolean ifData;
static char charData;
public static void main(String[] args) {
intData = 12;
ifData = false;
charData = 'a';
}
}
用 javac TestConstantPool.java 得到字节码文件 TestConstantPool.class,再通过 javap -v TestConstantPool.class 可以看到代码对应的常量池部分
反编译之后发现有这段代码编译之后常量池中放有26个常量类型,简单取其中#1解释一下
#1常量类型是 Methodref表示是一个类方法索引常量,用来描述Object的\ 方法,由类索引信息#6 和 方法索引信息 #21组成#6是Class类型,指向Obejct类,所以的全限定名又存放到 #26 Utf8类型中#21是NameAndType类型用来描述方法#13 和方法描述符信息#14#14用()V表示函数返回值为void