Java语言在被编译成class文件后,在class文件中,有专门的一个“常量池”(Constant Pool)区域来存储一些运行所需要的常量,包括一些写死的变量(比如定义一个字符串String str = "Hello world"
以及一些符号,例如类和方法的的名称等)。在JVM(se7)规范中,有以下这些类型的常量:
CONSTANT_Class CONSTANT_Long
CONSTANT_Fieldref CONSTANT_Double
CONSTANT_Methodref CONSTANT_NameAndType
CONSTANT_InterfaceMethodref CONSTANT_Utf8
CONSTANT_String CONSTANT_MethodHandle
CONSTANT_Integer CONSTANT_MethodType
CONSTANT_Float CONSTANT_InvokeDynamic
大部分我们顾名思义,都可以知道是大概是干啥的,比如字符串啊,数字啊,方法名称之类的;但是可以注意到最后面一个是称之为CONSTANT_InvokeDynamic
的常量,这个就有点陌生了。那么,这是一个什么样的常量?什么情况下会出现这个呢?