您的位置:首页 > 职场人生

黑马程序员-----java常量池(转载)

2014-02-21 09:54 260 查看
 
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

    在class文件中,“常量池”是最复杂也最值得关注的内容。

 

    Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值外,还包含一些以文本形式出现的符号引用,比如:类和接口的全限定名;字段的名称和描述符;方法和名称和描述符。
 

    在C语言中,如果一个程序要调用其它库中的函数,在连接时,该函数在库中的位置(即相对于库文件开头的偏移量)会被写在程序中,在运行时,直接去这个地址调用函数;

 

    而在Java语言中不是这样,一切都是动态的。编译时,如果发现对其它类方法的调用或者对其它类字段的引用的话,记录进class文件中的,只能是一个文本形式的符号引用,在连接过程中,虚拟机根据这个文本信息去查找对应的方法或字段。

 

    所以,与Java语言中的所谓“常量”不同,class文件中的“常量”内容非常丰富,这些常量集中在class中的一个区域存放,一个紧接着一个,这里就称为“常量池”。

 

    常量池由多条“常量池项”组成,每一个常量池项又由两部分组成:

 

    “常量池项头”和“常量池项体”。

 

    常量池项头表明常量池项的类型,常量池项共分为11种类型,分别为:

    常量池项类型  值  说明 

    CONSTANT_Utf8  1  UTF-8编码的Unicode字符串 

    CONSTANT_Integer  3  int型常量 

    CONSTANT_Float  4  Float型常量 

    CONSTANT_Long  5  Long型常量 

    CONSTANT_Double 6  double型常量 

    CONSTANT_Class   7  对一个class的符号引用 

    CONSTANT_String  8  String型常量  

    CONSTANT_Fieldref  9  对一个字段的符号引用  

    CONSTANT_Methodref  10  对一个类方法的符号引用 

    CONSTANT_InterfaceMedthodref  11  对一个接口方法的符号引用 

    CONSTANT_NameAndType 12  对名称和类型的符号引用 

 

    常量池项体中存放的就是对应的常量数据,比如各种数值型的常量或者字符串等。

    

  

----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: