為什么非靜態(tài)內(nèi)部類中不能有static成員變量蛛株,卻可以有static final 屬性的編譯期常量?

為了盡可能闡述清楚這個問題旋奢,我會從一下幾個方向說明這個問題:

1泳挥、 測試用例
    * 測試非靜態(tài)內(nèi)部類如何理解然痊?
    * 測試非靜態(tài)內(nèi)部類定義靜態(tài)成員是否合法至朗?
    * 測試非靜態(tài)內(nèi)部類是否可以定義靜態(tài)常量?
        a剧浸、定義字面常量
        b锹引、定義動態(tài)常量
2、 測試結(jié)果
3唆香、 探究緣由

測試方案:

測試非靜態(tài)內(nèi)部類如何理解嫌变?

代碼用例:

測試用例

結(jié)論:我們理解非靜態(tài)內(nèi)部類時,可以看作是一個外部類的一個非靜態(tài)成員躬它,那么其實非靜態(tài)內(nèi)部類就是隸屬于外部類對象的腾啥,但是它就其本質(zhì)還是一個。只要把握住這個兩個核心接下來的內(nèi)容就很好理解了冯吓。所以這也是為什么在TestInner類中測試使用Inner時倘待,我門需要創(chuàng)建外部類對象之后才能使用內(nèi)部類對象,因為:
??內(nèi)部類是屬于外部類對象的组贺,其次內(nèi)部類的非靜態(tài)內(nèi)容訪問也需要內(nèi)部類對象凸舵,所以要new 外部類.new 內(nèi)部類

測試方案:

測試非靜態(tài)內(nèi)部類定義靜態(tài)成員是否合法?

代碼用例:


測試用例

結(jié)論:我們在測試在非靜態(tài)內(nèi)部類中說明靜態(tài)內(nèi)容時失尖,會直接報錯啊奄,此時這是為什么呢渐苏?

第一:java虛擬機(jī)要求所有的靜態(tài)變量在類加載過程中的初始化階段將符號引用變?yōu)橹苯右谩N覀兒唵慰梢岳斫鉃椋?strong>此時還沒有對象呢菇夸!那么這也意味著我在內(nèi)部類中定義的靜態(tài)內(nèi)容琼富,要先于內(nèi)部類對象存在。因為它是類層面上的

第二:由于內(nèi)部類時依附于外部類對象的庄新,那么也就意味著內(nèi)部類中的內(nèi)容時依附于外部類的對象的公黑。但是內(nèi)部類中的靜態(tài)內(nèi)容是不需要實例就可以,上述第一條已經(jīng)說過了摄咆,但是由于第二條我們剛說的內(nèi)部類時依附于外部類的凡蚜,也就意味著內(nèi)部類無法做到在沒有外部類實例的情況下而直接使用,所以和我們剛寫的第一條相悖吭从。

所以在非靜態(tài)內(nèi)部類中不能定義靜態(tài)內(nèi)容【這句話不全對朝蜘,我們繼續(xù)往下看】

測試方案:

測試非靜態(tài)內(nèi)部類是否可以定義靜態(tài)常量?【編譯期常量】

代碼用例:


測試用例

測試結(jié)果:


測試用例

結(jié)論:我們是可以在非靜態(tài)內(nèi)部類中定義靜態(tài)常量的【這里要注意靜態(tài)常量一定擁有一個編譯期常量的】
第一:根據(jù)上面的測試用例2涩金,我們總結(jié)的結(jié)論谱醇,繼續(xù)向下推導(dǎo)。為什么在非靜態(tài)內(nèi)部類中常量是可以被static修飾的步做。這里要注意副渴,num這個變量被final static修飾后,由于所賦值為字面常量全度,而此時字面常量會在編譯階段確定值煮剧,我們將這樣的常量稱之為編譯期常量,而編譯期常量是不需要加載類的字節(jié)碼文件的将鸵,很多書上將這一步稱之為編譯期常量折疊【編譯器在編譯階段通過語法分析計算出常量表達(dá)式的具體值】勉盅。
第二:通過上一步的理解,我們也可以這樣說顶掉,編譯期常量不會導(dǎo)致類加載草娜,那么基于這一條,我們就可以理解為什么靜態(tài)常量在非靜態(tài)內(nèi)部類中定義是合法的痒筒。

測試方案:

測試非靜態(tài)內(nèi)部類是否可以定義靜態(tài)常量宰闰?【運(yùn)行期常量】

代碼用例:

測試用例

思考:為什么用 Math.random(); 就不行了呢?

結(jié)論:其實這里的原因就是和測試用例2和測試用例3結(jié)合起來的簿透。因為此時這里賦值不在時編譯期常量移袍,而是非編譯期常量,對于這樣的值而言編譯期無法折疊編譯器只能做一些語法檢查萎战,比如該常量之是否在其他地方做了修改等咐容。。蚂维。既然無法確定值戳粒,那么就會導(dǎo)致該常量值的確定需要類被加載時確定路狮,其實也和我們測試用例2一樣,就會報錯蔚约。

所以非靜態(tài)內(nèi)部類中不能擁有靜態(tài)成員變量/方法奄妨,但是可以有靜態(tài)的編譯期常量,不能使用非編譯期常量苹祟。通過這個我們也可以理解為什么有些類中定義的字符串會通過static final修飾了砸抛。無需導(dǎo)致類加載,在一定程度上降低了內(nèi)存消耗树枫。

版權(quán)聲明:本文為原創(chuàng)文章直焙,未經(jīng)博主允許不責(zé)轉(zhuǎn)載。
地址:http://www.reibang.com/p/4dbe68850e1b

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末砂轻,一起剝皮案震驚了整個濱河市奔誓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搔涝,老刑警劉巖厨喂,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異庄呈,居然都是意外死亡蜕煌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門诬留,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斜纪,“玉大人,你說我怎么就攤上這事故响】悖” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵彩届,是天一觀的道長。 經(jīng)常有香客問我誓酒,道長樟蠕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任靠柑,我火速辦了婚禮寨辩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘歼冰。我一直安慰自己靡狞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布隔嫡。 她就那樣靜靜地躺著甸怕,像睡著了一般甘穿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上梢杭,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天温兼,我揣著相機(jī)與錄音,去河邊找鬼武契。 笑死募判,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的咒唆。 我是一名探鬼主播届垫,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼全释!你這毒婦竟也來了敦腔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤恨溜,失蹤者是張志新(化名)和其女友劉穎符衔,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糟袁,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡判族,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了项戴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片形帮。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖周叮,靈堂內(nèi)的尸體忽然破棺而出辩撑,到底是詐尸還是另有隱情,我是刑警寧澤仿耽,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布合冀,位于F島的核電站,受9級特大地震影響项贺,放射性物質(zhì)發(fā)生泄漏君躺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一开缎、第九天 我趴在偏房一處隱蔽的房頂上張望棕叫。 院中可真熱鬧,春花似錦奕删、人聲如沸俺泣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伏钠。三九已至横漏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贝润,已是汗流浹背绊茧。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留打掘,地道東北人华畏。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像尊蚁,于是被迫代替她去往敵國和親亡笑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容