黑马程序员技术交流社区
标题:
关于java常量池
[打印本页]
作者:
王责彬
时间:
2014-8-27 18:28
标题:
关于java常量池
常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括
字符串
常量,如String s = "java"这种申明方式;当然也可扩充,
执行器
产生的常量也会放入常量池,故认为常量池是
JVM
的一块特殊的
内存
空间。
Java是一种
动态链接
的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及
数组
)的常量值外,还包含一些以
文本形式
出现的符号引用,比如:
类和接口的全限定名;
字段的名称和描述符;
方法的名称和描述符。
在C语言中,如果一个程序要调用其它库中的函数,在链接时,该函数在库中的位置(即相对于
库文件
开头的
偏移量
)会被写在程序中,在运行时,直接去这个地址调用函数;
而在Java语言中不是这样,一切都是动态的。编译时,如果发现对其它类方法的调用或者对其它类字段的引用的语句,记录进class文件中的只能是一个
文本形式
的符号引用,在连接过程中,
虚拟机
根据这个文本信息去查找对应的方法或字段。
所以,与Java语言中的所谓“常量”不同,class文件中的“常量”内容很非富,这些常量集中在class中的一个区域存放,一个紧接着一个,这里就称为“常量池”。
作者:
忆梦追风
时间:
2014-8-27 22:45
嗯,好的,很清楚
作者:
忆梦追风
时间:
2014-8-27 22:46
嗯,好的,很清楚,我对这个概念很模糊
作者:
alee
时间:
2014-8-27 23:59
谢谢楼主分享
作者:
赵权
时间:
2014-8-28 00:04
谢谢分享,学到了
作者:
Kikyou
时间:
2014-8-28 00:05
mark,谢谢楼主分享
作者:
忆梦追风
时间:
2014-8-28 21:50
OK看过飘过
作者:
我行我SHOW‰
时间:
2014-8-28 23:58
谢谢楼主分享~~~~~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2