Non-Static Inner Class

非靜態(tài)內(nèi)部類(后面討論的都是非靜態(tài)的)能夠獲取到外部包裹類的私有的字段/方法因為: 1.外部包裹類為了讓內(nèi)部類訪問,會為每個字段創(chuàng)建一個包訪問級別的方法; 2.內(nèi)部類會產(chǎn)生一個外部包裹類的引用字段擂错,并為訪問外部包裹類的字段/方法產(chǎn)生一個靜態(tài)方法,然后通過持有的外部包裹類的引用分別獲取字段和調(diào)用相應(yīng)方法甲献。 例如:

public class OuterClass {
       private int id;
       public OuterClass() {
       }
       private void doSomeStuff() {
           InnerClass innerObject = new InnerClass();
           innerObject.doSomeOtherStuff();
      }
       private class InnerClass {
           private InnerClass() {
           }
           private void doSomeOtherStuff() {
               OuterClass.this.doSomeStuff();
          } 
      }
}

產(chǎn)生的字節(jié)碼為:

class OuterClass {
       private int id;
       private void doSomeStuff() {
           OuterClass$InnerClass innerObject = new OuterClass$InnerClass();
           innerObject.doSomeStuff();
       }
       int access$0() {
           return id;
       } 
}
class InnerClass {
   OuterClass this$0;
       void doSomeOtherStuff() {
           InnerClass.access$100(this$0);
       }
    static void access$100(OuterClass outerClass) {
           outerClass.doSomeStuff();
    }
   static int access$0(OuterClass outerClass) {
           return outerClass.id;
   } 
}

這將導(dǎo)致訪問速度較慢,將外部包裹類中需要在內(nèi)部類中訪問的字段和方法聲明為包訪問權(quán)限的喊熟,將不會為了內(nèi)部類訪問編譯時生成相應(yīng)的靜態(tài)方法,進(jìn)行有效優(yōu)化。

public class OuterClass {
       int id;
       void doSomeStuff() {
           InnerClass innerObject = new InnerClass();
           innerObject.doSomeOtherStuff();
       }
       private class InnerClass {
           private void doSomeOtherStuff() {
               OuterClass.this.doSomeStuff();
           }
      }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末陨倡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子许布,更是在濱河造成了極大的恐慌兴革,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜜唾,死亡現(xiàn)場離奇詭異杂曲,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)袁余,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門擎勘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颖榜,你說我怎么就攤上這事棚饵∶喝梗” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵噪漾,是天一觀的道長积暖。 經(jīng)常有香客問我,道長怪与,這世上最難降的妖魔是什么夺刑? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮分别,結(jié)果婚禮上遍愿,老公的妹妹穿的比我還像新娘。我一直安慰自己耘斩,他們只是感情好沼填,可當(dāng)我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著括授,像睡著了一般坞笙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荚虚,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天薛夜,我揣著相機(jī)與錄音,去河邊找鬼版述。 笑死梯澜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的渴析。 我是一名探鬼主播晚伙,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼俭茧!你這毒婦竟也來了咆疗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤母债,失蹤者是張志新(化名)和其女友劉穎午磁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體场斑,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡漓踢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年牵署,在試婚紗的時候發(fā)現(xiàn)自己被綠了漏隐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡奴迅,死狀恐怖青责,靈堂內(nèi)的尸體忽然破棺而出挺据,到底是詐尸還是另有隱情,我是刑警寧澤脖隶,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布扁耐,位于F島的核電站,受9級特大地震影響产阱,放射性物質(zhì)發(fā)生泄漏婉称。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一构蹬、第九天 我趴在偏房一處隱蔽的房頂上張望王暗。 院中可真熱鬧,春花似錦庄敛、人聲如沸俗壹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绷雏。三九已至,卻和暖如春怖亭,著一層夾襖步出監(jiān)牢的瞬間涎显,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工兴猩, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留棺禾,地道東北人。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓峭跳,卻偏偏與公主長得像膘婶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蛀醉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,585評論 2 359

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