精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

好好說說Java中的常量池之Class常量池

開發(fā) 開發(fā)工具
在Java有關(guān)的面試題中,一般習(xí)慣通過String的有關(guān)問題來考察面試者對于常量池的知識的理解,幾道簡單的String面試題難倒了無數(shù)的開發(fā)者。所以說,常量池是Java體系中一個(gè)非常重要的概念。

 在Java中,常量池的概念想必很多人都聽說過。這也是面試中比較常考的題目之一。在Java有關(guān)的面試題中,一般習(xí)慣通過String的有關(guān)問題來考察面試者對于常量池的知識的理解,幾道簡單的String面試題難倒了無數(shù)的開發(fā)者。所以說,常量池是Java體系中一個(gè)非常重要的概念。

談到常量池,在Java體系中,共用三種常量池。分別是字符串常量池、Class常量池和運(yùn)行時(shí)常量池。

本文是《好好說說Java中的常量池》系列的***篇,先來介紹一下到底什么是Class常量池。

什么是Class文件

 

在Java代碼的編譯與反編譯那些事兒中我們介紹過Java的編譯和反編譯的概念。我們知道,計(jì)算機(jī)只認(rèn)識0和1,所以程序員寫的代碼都需要經(jīng)過編譯成0和1構(gòu)成的二進(jìn)制格式才能夠讓計(jì)算機(jī)運(yùn)行。

我們在深入分析Java的編譯原理中提到過,為了讓Java語言具有良好的跨平臺能力,Java獨(dú)具匠心的提供了一種可以在所有平臺上都能使用的一種中間代碼——字節(jié)碼(ByteCode)。

有了字節(jié)碼,無論是哪種平臺(如Windows、Linux等),只要安裝了虛擬機(jī),都可以直接運(yùn)行字節(jié)碼。

同樣,有了字節(jié)碼,也解除了Java虛擬機(jī)和Java語言之間的耦合。這話可能很多人不理解,Java虛擬機(jī)不就是運(yùn)行Java語言的么?這種解耦指的是什么?

其實(shí),目前Java虛擬機(jī)已經(jīng)可以支持很多除Java語言以外的語言了,如Groovy、JRuby、Jython、Scala等。之所以可以支持,就是因?yàn)檫@些語言也可以被編譯成字節(jié)碼。而虛擬機(jī)并不關(guān)心字節(jié)碼是有哪種語言編譯而來的。

Java語言中負(fù)責(zé)編譯出字節(jié)碼的編譯器是一個(gè)命令是javac。

javac是收錄于JDK中的Java語言編譯器。該工具可以將后綴名為.java的源文件編譯為后綴名為.class的可以運(yùn)行于Java虛擬機(jī)的字節(jié)碼。

如,我們有以下簡單的HelloWorld.java代碼:

  1. public class HelloWorld { 
  2.     public static void main(String[] args) { 
  3.         String s = "Hollis"
  4.     } 

通過javac命令生成class文件:

  1. javac HelloWorld.java 

生成HelloWorld.class文件:

 

如何使用16進(jìn)制打開class文件:使用 vim test.class ,然后在交互模式下,輸入:%!xxd即可。

可以看到,上面的文件就是Class文件,Class文件中包含了Java虛擬機(jī)指令集和符號表以及若干其他輔助信息。

要想能夠讀懂上面的字節(jié)碼,需要了解Class類文件的結(jié)構(gòu),由于這不是本文的重點(diǎn),這里就不展開說明了。

讀者可以看到,HelloWorld.class文件中的前八個(gè)字母是cafe babe,這就是Class文件的魔數(shù)(Java中的”魔數(shù)”)

我們需要知道的是,在Class文件的4個(gè)字節(jié)的魔數(shù)后面的分別是4個(gè)字節(jié)的Class文件的版本號(第5、6個(gè)字節(jié)是次版本號,第7、8個(gè)字節(jié)是主版本號,我生成的Class文件的版本號是52,這時(shí)Java 8對應(yīng)的版本。也就是說,這個(gè)版本的字節(jié)碼,在JDK 1.8以下的版本中無法運(yùn)行)在版本號后面的,就是Class常量池入口了。

Class常量池

 

Class常量池可以理解為是Class文件中的資源倉庫。 Class文件中除了包含類的版本、字段、方法、接口等描述信息外,還有一項(xiàng)信息就是常量池(constant pool table),用于存放編譯器生成的各種字面量(Literal)和符號引用(Symbolic References)。

由于不同的Class文件中包含的常量的個(gè)數(shù)是不固定的,所以在Class文件的常量池入口處會設(shè)置兩個(gè)字節(jié)的常量池容量計(jì)數(shù)器,記錄了常量池中常量的個(gè)數(shù)。

 

當(dāng)然,還有一種比較簡單的查看Class文件中常量池的方法,那就是通過javap命令。對于以上的HelloWorld.class,可以通過

  1. javap -v HelloWorld.class 

查看常量池內(nèi)容如下:

 

從上圖中可以看到,反編譯后的class文件常量池中共有16個(gè)常量。而Class文件中常量計(jì)數(shù)器的數(shù)值是0011,將該16進(jìn)制數(shù)字轉(zhuǎn)換成10進(jìn)制的結(jié)果是17。

原因是:與Java的語言習(xí)慣不同,常量池計(jì)數(shù)器是從1開始而不是從0開始的,常量池的個(gè)數(shù)是 十進(jìn)制的17,這就代表了其中有16個(gè)常量,索引值范圍為1-16。

常量池中有什么

 

介紹完了什么是Class常量池以及如何查看常量池,那么接下來我們就要深入分析一下,Class常量池中都有哪些內(nèi)容。

常量池中主要存放兩大類常量:字面量(literal)和符號引用(symbolic references)。

字面量

 

前面說過,運(yùn)行時(shí)常量池中主要保存的是字面量和符號引用,那么到底什么字面量?

在計(jì)算機(jī)科學(xué)中,字面量(literal)是用于表達(dá)源代碼中一個(gè)固定值的表示法(notation)。幾乎所有計(jì)算機(jī)編程語言都具有對基本值的字面量表示,諸如:整數(shù)、浮點(diǎn)數(shù)以及字符串;而有很多也對布爾類型和字符類型的值也支持字面量表示;還有一些甚至對枚舉類型的元素以及像數(shù)組、記錄和對象等復(fù)合類型的值也支持字面量表示法。

以上是關(guān)于計(jì)算機(jī)科學(xué)中關(guān)于字面量的解釋,并不是很容易理解。說簡單點(diǎn),字面量就是指由字母、數(shù)字等構(gòu)成的字符串或者數(shù)值。

字面量只可以右值出現(xiàn),所謂右值是指等號右邊的值,如:int a=123這里的a為左值,123為右值。在這個(gè)例子中123就是字面量。

  1. int a = 123;String s = "hollis"

上面的代碼示例中,123和hollis都是字面量。

本文開頭的HelloWorld代碼中,Hollis就是一個(gè)字面量。

符號引用

 

常量池中,除了字面量以外,還有符號引用,那么到底什么是符號引用呢。

符號引用是編譯原理中的概念,是相對于直接引用來說的。主要包括了以下三類常量:

  • 類和接口的全限定名
  • 字段的名稱和描述符
  • 方法的名稱和描述符

這也就可以印證前面的常量池中還包含一些com/hollis/HelloWorld、main、([Ljava/lang/String;)V等常量的原因了。

Class常量池有什么用

 

前面介紹了這么多,關(guān)于Class常量池是什么,怎么查看Class常量池以及Class常量池中保存了哪些東西。有一個(gè)關(guān)鍵的問題沒有講,那就是Class常量池到底有什么用。

首先,可以明確的是,Class常量池是Class文件中的資源倉庫,其中保存了各種常量。而這些常量都是開發(fā)者定義出來,需要在程序的運(yùn)行期使用的。

在《深入理解Java虛擬》中有這樣的表述:

Java代碼在進(jìn)行Javac編譯的時(shí)候,并不像C和C++那樣有“連接”這一步驟,而是在虛擬機(jī)加載Class文件的時(shí)候進(jìn)行動態(tài)連接。也就是說,在Class文件中不會保存各個(gè)方法、字段的最終內(nèi)存布局信息,因此這些字段、方法的符號引用不經(jīng)過運(yùn)行期轉(zhuǎn)換的話無法得到真正的內(nèi)存入口地址,也就無法直接被虛擬機(jī)使用。當(dāng)虛擬機(jī)運(yùn)行時(shí),需要從常量池獲得對應(yīng)的符號引用,再在類創(chuàng)建時(shí)或運(yùn)行時(shí)解析、翻譯到具體的內(nèi)存地址之中。關(guān)于類的創(chuàng)建和動態(tài)連接的內(nèi)容,在虛擬機(jī)類加載過程時(shí)再進(jìn)行詳細(xì)講解。

這段話,看起來很繞,不是很容易理解。其實(shí)他的意思就是: Class是用來保存常量的一個(gè)媒介場所,并且是一個(gè)中間場所。在JVM真的運(yùn)行時(shí),需要把常量池中的常量加載到內(nèi)存中。

至于到底哪個(gè)階段會做這件事情,以及Class常量池中的常量會以何種方式被加載到具體什么地方,會在本系列文章的后續(xù)內(nèi)容中繼續(xù)闡述。歡迎關(guān)注我的博客(https://www.hollischuang.com) 和公眾號(Hollis),即可***時(shí)間獲得***內(nèi)容。

另外,關(guān)于常量池中常量的存儲形式,以及數(shù)據(jù)類型的表示方法本文中并未涉及,并不是說這部分知識點(diǎn)不重要,只是Class字節(jié)碼的分析本就枯燥,作者不想在一篇文章中給讀者灌輸太多的理論上的內(nèi)容。感興趣的讀者可以自行Google學(xué)習(xí),如果真的有必要,我也可以單獨(dú)寫一篇文章再深入介紹。

【本文是51CTO專欄作者Hollis的原創(chuàng)文章,作者微信公眾號Hollis(ID:hollischuang)】

 

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2011-06-01 14:01:45

JavaString

2011-11-21 09:19:39

Java常量池面試題

2011-07-22 17:06:22

java

2011-06-09 11:36:00

java

2024-03-04 15:05:37

2022-12-27 08:13:40

JAVA字符串常量池

2015-11-16 10:24:45

Java常量池字符串

2015-10-27 09:41:16

Javaintern

2021-03-11 19:14:42

Java常量池元空間

2024-01-25 11:42:00

C++編程指針常量

2015-10-10 11:23:17

Java常量反模式

2015-09-22 10:56:13

Java反模式

2020-09-04 10:29:47

Java線程池并發(fā)

2023-06-07 08:08:43

JVM內(nèi)存模型

2024-03-11 18:18:58

項(xiàng)目Spring線程池

2010-03-18 08:59:29

JVM字符串JVM常量池

2012-02-01 11:20:23

Java線程

2024-06-04 09:02:03

2021-03-25 12:00:18

Python變量常量

2024-09-12 08:35:06

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

北条麻妃国产九九精品视频| 欧美国产一级| 色综合亚洲欧洲| 欧美日韩一区在线观看视频| 91久久精品无码一区二区| 欧美在线黄色| 亚洲欧美日韩视频一区| 污视频在线观看免费网站| 亚洲少妇视频| 亚洲精选视频免费看| 蜜桃网站成人| 国产极品999| 日韩主播视频在线| 欧美黄网免费在线观看| 神马久久久久久久久久久| 伊人久久影院| 欧美色综合天天久久综合精品| 激情五月六月婷婷| www.黄在线观看| 波多野洁衣一区| 亚洲综合av影视| 少妇又紧又色又爽又刺激视频| 亚洲日韩视频| 欧美成人精品在线观看| 99久久99久久精品免费看小说. | 国产欧美一区二区三区在线看| 精品少妇theporn| 国产精品成人一区二区不卡| 亚洲精品视频免费| 激情综合激情五月| 精品999日本久久久影院| 欧洲人成人精品| 日韩少妇内射免费播放| 精灵使的剑舞无删减版在线观看| 国产精品成人一区二区艾草| 日韩视频在线观看国产| 九色网友自拍视频手机在线| eeuss影院一区二区三区| 99超碰麻豆| 91成品人影院| 麻豆国产欧美日韩综合精品二区| 日本不卡高字幕在线2019| 日本三级网站在线观看| 你懂的成人av| 久久的精品视频| 午夜成人亚洲理伦片在线观看| 国产亚洲欧美日韩在线观看一区二区 | 日韩有码中文字幕在线| 亚洲精品一区二区三区精华液 | 欧美巨乳美女视频| 欧美性x x x| 99精品综合| 精品国产视频在线| 国产老头老太做爰视频| 这里只有精品在线| 插插插亚洲综合网| 天天干中文字幕| 国产精品大片| 久久乐国产精品| 色网站在线播放| 美女被久久久| 国产精品老女人精品视频| 在线免费观看av片| 黄页网站大全一区二区| 97久久夜色精品国产九色| 亚洲精品一级片| 99国产精品久久久久久久久久 | 欧美性极品xxxx娇小| 蜜臀av午夜一区二区三区| 羞羞影院欧美| 欧美日韩国产一级片| 亚洲视频在线不卡| 国产精品调教| 亚洲图片在线综合| 国产一区二区三区视频播放| 亚洲情侣在线| 欧美精品久久久久久久| 成人免费毛片视频| 麻豆精品精品国产自在97香蕉| 亚洲一区二区中文| 无码国精品一区二区免费蜜桃| 久久综合久久综合久久| 婷婷久久五月天| 国产在线69| 亚洲1区2区3区视频| 国产无套粉嫩白浆内谢的出处| 国产乱子精品一区二区在线观看| 日韩精品一区二区三区在线| 亚洲乱码国产乱码精品精大量 | 伊人再见免费在线观看高清版 | 91在线不卡| 亚洲激情成人在线| 日韩免费高清在线| 欧洲大片精品免费永久看nba| 亚洲激情在线视频| 国产三级aaa| 亚洲午夜极品| 国产精品女人网站| 熟妇高潮一区二区高潮| 国产精品麻豆一区二区| 国产一区二区四区| 久久爱.com| 国产丝袜精品视频| 青青草国产在线观看| 视频一区在线播放| av资源站久久亚洲| jizz在线观看| 天涯成人国产亚洲精品一区av| 日本不卡一区二区在线观看| 久久综合另类图片小说| 久久精品色欧美aⅴ一区二区| 色婷婷av国产精品| 国产精品资源在线看| 日韩欧美视频一区二区| 伊人222成人综合网| 在线观看日韩av先锋影音电影院| 无码人妻精品一区二区三区99不卡| 超碰成人久久| 青青久久aⅴ北条麻妃| 亚洲av无码专区在线| 中文成人综合网| 黑人糟蹋人妻hd中文字幕 | 久久久久久久久一区| 伊人手机在线| 欧美一级片在线看| 欧美xxxx精品| 日韩黄色免费网站| 久久久水蜜桃| 欧美裸体视频| 日韩av在线免费| 国产一级在线视频| 国产成人午夜99999| 熟妇熟女乱妇乱女网站| 成人午夜sm精品久久久久久久| 国产视频在线一区二区| 日韩黄色在线视频| 成人国产精品免费观看视频| 欧美日韩午夜爽爽| 久久一级大片| 欧美久久精品午夜青青大伊人| 国产精品久久综合青草亚洲AV| 久久精品夜色噜噜亚洲a∨| 欧美 日韩 国产在线观看| 国产精品调教| 7777精品视频| 青青草娱乐在线| 欧美午夜视频在线观看| 蜜桃精品一区二区| 久久九九电影| 日韩不卡av| 欧美日韩伦理一区二区| 日韩有码片在线观看| 国产精品午夜福利| 国产精品久久久久一区二区三区 | 一本色道久久综合亚洲精品酒店 | 三级在线免费观看| 秋霞影院一区| 久久久久久成人| 亚洲av片在线观看| 色婷婷综合久久久| 日韩一级片在线免费观看| 久久国产精品无码网站| 久久最新免费视频| 中文字幕一区日韩精品| 97精品欧美一区二区三区| 欧美zozo| 欧美狂野另类xxxxoooo| 麻豆国产尤物av尤物在线观看| youjizz国产精品| 最近免费中文字幕中文高清百度| 日韩免费高清| av成人观看| 亚洲精品mv| 中文字幕亚洲无线码a| jizz国产视频| 欧美午夜宅男影院在线观看| 永久免费成人代码| 国产呦精品一区二区三区网站| 青青青青在线视频| 国产精品中文字幕亚洲欧美| 国产精品稀缺呦系列在线| 亚洲婷婷噜噜| 亚洲美女www午夜| 国产一区二区三区四区视频 | 亚洲精品毛片一区二区三区| 亚洲天堂久久久久久久| 女同性恋一区二区三区| 麻豆久久久久久久| av免费观看国产| 欧美日韩在线二区| 成人一区二区在线| 91综合国产| 久久久久久久久久久久av| av免费在线一区二区三区| 日韩欧美一区在线观看| 波多野结衣一区二区在线| 洋洋成人永久网站入口| 公肉吊粗大爽色翁浪妇视频| 高清成人在线观看| 色片在线免费观看| 日韩一级免费| 日本xxx免费| 国产精品午夜一区二区三区| 91九色对白| 福利视频亚洲| 91精品国产色综合久久不卡98口 | 青青青草网站免费视频在线观看| 91超碰这里只有精品国产| 国产三级av片| 亚洲一区二区视频在线观看| 国产一二三av| 久久久国产精华| 精品人妻一区二区免费视频| 精品一区二区三区在线播放视频| 狠狠爱免费视频| 激情久久五月| 国产一级片91| 亚洲成av人片乱码色午夜| 日本精品一区二区三区视频| 国产丝袜一区| y111111国产精品久久婷婷| 四虎视频在线精品免费网址| 国产精品69久久久久| 欧美激情护士| 91超碰caoporn97人人| 亚洲第一图区| 美女视频久久黄| 黄色在线免费| 久久久久北条麻妃免费看| aaa在线免费观看| 中文字幕国产亚洲| 黄上黄在线观看| 亚洲区一区二区| 人操人视频在线观看| 亚洲精品一区二区三区影院 | 久久久久99精品一区| 男人添女人荫蒂国产| 国产精品亚洲第一区在线暖暖韩国 | 欧美成熟毛茸茸复古| 色吊丝一区二区| 国精产品一区二区| 图片婷婷一区| 欧美亚洲丝袜| 成人免费在线播放| 亚洲一区二区在线看| 欧美国产美女| 伊人久久在线观看| 精品av久久久久电影| 毛片在线播放视频| 亚洲自拍另类| 欧美在线观看视频网站| 日本不卡中文字幕| 老司机久久精品| 国产精品中文欧美| 亚洲国产精品狼友在线观看| caoporn国产一区二区| www.色天使| 中文字幕制服丝袜一区二区三区| 久久国产波多野结衣| 亚洲自拍欧美精品| aaa人片在线| 91福利在线导航| 一道本无吗一区| 日韩欧美视频在线| 四虎永久在线观看| 国产亚洲成精品久久| 日本最新在线视频| 欧美大秀在线观看| 另类图片综合电影| 91久久国产婷婷一区二区| 亚洲1区在线观看| 久久99精品久久久久子伦| 精品一区不卡| 丰满人妻一区二区三区53号| 一区二区三区福利| 色综合手机在线| 国产精品一二三在| 亚欧洲乱码视频| 亚洲欧洲成人自拍| 日韩三级一区二区三区| 欧美色中文字幕| 后入内射欧美99二区视频| 亚洲视频免费一区| 性欧美高清come| 国产精品99蜜臀久久不卡二区| av国产精品| 免费成人深夜夜行视频| 91精品蜜臀一区二区三区在线| 男人日女人视频网站| 久久精品国产久精国产| 成人在线电影网站| 中文字幕中文在线不卡住| 六月丁香在线视频| 欧美高清精品3d| 三级视频在线播放| 久久中文字幕在线| 欧美大片免费观看网址| 成人91免费视频| 欧美大黑bbbbbbbbb在线| 免费在线观看亚洲视频| 国内精品第一页| 中文幕无线码中文字蜜桃| 有码一区二区三区| 中文有码在线播放| 亚洲精品黄网在线观看| 超鹏97在线| 国产精品视频区1| 香蕉久久精品| 日韩一级片免费视频| 久久99精品国产.久久久久| 日韩人妻无码精品综合区| 夜夜精品浪潮av一区二区三区| 中文字幕日本人妻久久久免费 | 国产高清一级毛片在线不卡| 午夜精品久久久久久久99黑人 | 成人18视频免费69| 日本高清视频一区二区| 香蕉视频成人在线| 欧美福利视频在线观看| 91精品国产色综合久久不卡粉嫩| 日本亚洲导航| 久久狠狠一本精品综合网| 亚洲色图欧美日韩| 亚洲黄色av一区| 99热这里只有精| 久久精品成人一区二区三区 | 欧美日韩黄色影视| 国产天堂在线| 国产成人精品电影| 亚洲人成网亚洲欧洲无码| 国产a级片网站| 成人av在线资源| 日本熟妇成熟毛茸茸| 欧美一区二区黄| 午夜羞羞小视频在线观看| 91热精品视频| 综合天堂av久久久久久久| 亚洲一二三不卡| 亚洲啪啪综合av一区二区三区| 91久久国语露脸精品国产高跟| 色悠悠久久久久| 日本一区二区中文字幕| 亚洲一区二区精品在线观看| 奇米精品一区二区三区在线观看| 国产伦理片在线观看| 色偷偷一区二区三区| 国产www.大片在线| 国产女人18毛片水18精品| 久久在线视频免费观看| 日本黄色的视频| 亚洲精品乱码久久久久久| 亚洲av无码国产综合专区| 欧美精品第一页在线播放| 久久精品亚洲成在人线av网址| 欧美极品欧美精品欧美| 91老师国产黑色丝袜在线| 亚洲精品中文字幕乱码三区91| 亚洲新声在线观看| 欧美国产视频| 永久免费网站视频在线观看| 高清国产午夜精品久久久久久| 日韩男人的天堂| 亚洲视频在线看| 亚洲图片小说区| 日韩精品在线中文字幕| 91在线观看下载| 亚洲免费视频二区| 欧美成人合集magnet| 老司机精品视频在线播放| avav在线看| 国产精品的网站| 全国男人的天堂网| 国产精品久久一| 国产精品hd| 美女100%无挡| 在线成人av网站| av岛国在线| 亚洲国产一区二区在线| 国产成人在线视频免费播放| 国产成人一区二区三区影院在线| 亚洲天堂av在线播放| 免费观看性欧美大片无片| 丰满少妇被猛烈进入高清播放| 国产精品区一区二区三| 免费看日韩av| 国产精品美女www| 日韩视频一区| 乱老熟女一区二区三区| 亚洲成成品网站| 国产精品.xx视频.xxtv| 久草视频国产在线| 国产精品嫩草影院com| 婷婷开心激情网| 成人有码在线视频| 每日更新成人在线视频| 欧美日韩人妻精品一区二区三区| 亚洲欧美激情另类校园| 视频国产精品| 艹b视频在线观看| 色综合久久综合网97色综合|