隨筆 - 154  文章 - 60  trackbacks - 0
          <2007年10月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          聲明:

          該blog是為了收集資料,認(rèn)識(shí)朋友,學(xué)習(xí)、提高技術(shù),所以本blog的內(nèi)容除非聲明,否則一律為轉(zhuǎn)載?。?br />
          感謝那些公開自己技術(shù)成果的高人們!??!

          支持開源,尊重他人的勞動(dòng)??!

          常用鏈接

          留言簿(3)

          隨筆分類(148)

          隨筆檔案(143)

          收藏夾(2)

          其他

          學(xué)習(xí)(技術(shù))

          觀察思考(非技術(shù))

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          /*
           有synthetic標(biāo)記的field和method是class內(nèi)部使用的,
           正常的源代碼里不會(huì)出現(xiàn)synthetic field。小穎編譯工具用的就是jad.
           所有反編譯工具都不能保證完全正確地反編譯class。所以你不能要求太多。
           下面我給大家介紹一下 synthetic
           下面的例子是最常見的 synthetic field
          */
          class parent{
           public void foo(){
            System.out.println("this is foo");
           }
           
           class inner{
            inner(){
             foo();
            }
           }
          }
          /*
           非static的inner class里面都會(huì)有一個(gè)this$0的字段保存它的父對(duì)象。編譯后的inner class 就像下面這樣:

          class parent$inner{
           synthetic parent this$0;
           parent$inner(parent this$0){
            this.this$0 = this$0;
            this$0.foo();
           }
          }

          所有父對(duì)象的非私有成員都通過 this$0來訪問。

          還有許多用到synthetic的地方。比如使用了 assert 關(guān)鍵字的class會(huì)有一個(gè)
          synthetic static boolean $assertionsDisabled 字段
          使用了assert的地方
          assert condition;
          在class里被編譯成
          if(!$assertionsDisabled && !condition){
           throw new AssertionError();
          }

          還有,在jvm里,所有class的私有成員都不允許在其他類里訪問,包括它的inner class。
          在java語言里inner class是可以訪問父類的私有成員的。在class里是用如下的方法實(shí)現(xiàn)的:

          class parent
          {
           private int value = 0;
           synthetic static int access$000(parent obj){
            return value;
           }
          }

          在inner class里通過access$000來訪問value字段。

          希望通過上面幾個(gè)例子,大家對(duì)synthetic 有所了解。
          */

          posted on 2007-10-19 11:07 lk 閱讀(839) 評(píng)論(0)  編輯  收藏 所屬分類: j2se
          主站蜘蛛池模板: 健康| 东明县| 霍山县| 双牌县| 炎陵县| 寿光市| 防城港市| 油尖旺区| 开化县| 冕宁县| 廊坊市| 台湾省| 沙河市| 潮安县| 桂东县| 嘉善县| 绥棱县| 伊金霍洛旗| 丰镇市| 高淳县| 祁连县| 柳江县| 泰兴市| 交口县| 柞水县| 红安县| 鄯善县| 桂林市| 霸州市| 公安县| 盐津县| 贡山| 罗山县| 民勤县| 如皋市| 孟津县| 百色市| 陕西省| 吴旗县| 都兰县| 双柏县|