<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    上善若水
    In general the OO style is to use a lot of little objects with a lot of little methods that give us a lot of plug points for overriding and variation. To do is to be -Nietzsche, To bei is to do -Kant, Do be do be do -Sinatra
    posts - 146,comments - 147,trackbacks - 0

    首先來比較兩段代碼所產(chǎn)生的中間代碼:

     public class AppConfig {

        public static final boolean debug = true;
    }
    public class DebugCode {
        
    public static void main(String[] args) {
           
    if(AppConfig.debug) {
               System.out.println(
    "Some debug information");
           }
        }
    }

    DebugCode的中間代碼(部分):

    public class org.levin.insidejvm.miscs.DebugCode {

     public static void main(java.lang.String[] args);

        0 getstatic java.lang.System.out : java.io.PrintStream [16]

        3 ldc <String "Some debug information"> [22]

        5 invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]

        8 return

    }

     

    public class AppConfig {
        
    public static final boolean debug = false;
    }
    public class ReleaseCode {
        
    public static void main(String[] args) {
           
    if(AppConfig.debug) {
               System.out.println(
    "Some debug information");
           }
        }
    }

     

     

    ReleaseCode中間代碼(部分):

    public class org.levin.insidejvm.miscs.ReleaseCode {

     public static void main(java.lang.String[] args);

        0 return

    }

     

    在上面的代碼中,很明顯DebugCodeReleaseCode中的代碼是一樣的,只是AppConfig.debug的值不一樣而已,卻產(chǎn)生了不同的中間代碼,即編譯器在AppConfig.debugfalse的時候直接忽略了if中的語句。利用這個特性,我們就可以根據(jù)配置來實現(xiàn)條件編譯,從而實現(xiàn)不同的條件產(chǎn)生不同的中間代碼而不只是不同的運行結(jié)果。

     

    然而在這里為什么會出現(xiàn)這樣的行為呢?

    這是因為編譯器對final修飾的基本類型和String類型的變量,在編譯時解析為一個本地拷貝,這樣拷貝導致編譯器在編譯的時候明確的知道ReleaseCode的那一段if語句是不會被執(zhí)行的,因而可以對其做優(yōu)化。而這種替換的結(jié)果也使得用final修飾的int變量可以出現(xiàn)在switch-case語句中。

     

    這種方式的缺陷

    這種方式的缺陷在于要現(xiàn)實該機制的條件編譯,在改變AppConfig.debug中的值時,需要同時對AppConfig類和ReleaseCode類進行編譯(即不能只編譯AppConfig類)。

     

    參考:《深入Java虛擬機(第二版)》第八章
    2010-09-22

    posted on 2011-07-20 00:23 DLevin 閱讀(1753) 評論(0)  編輯  收藏 所屬分類: Core Java
    主站蜘蛛池模板: 亚洲高清无在码在线电影不卡| 美女视频黄a视频全免费网站色| 日韩一区二区a片免费观看| 亚洲人成网站18禁止| 亚洲另类少妇17p| 91精品啪在线观看国产线免费| 亚洲AV无码乱码在线观看代蜜桃 | 无码毛片一区二区三区视频免费播放| 一本色道久久综合亚洲精品高清| 99re在线视频免费观看| 国产亚洲视频在线观看网址 | 久久夜色精品国产噜噜亚洲a| 亚洲av片一区二区三区| 四虎在线免费视频| 免费国产污网站在线观看不要卡| 亚洲情a成黄在线观看动漫尤物| 日韩黄色免费观看| 色欲国产麻豆一精品一AV一免费| 无码一区二区三区亚洲人妻| 亚洲免费视频在线观看| 亚洲成A人片在线观看无码3D| 午夜国产精品免费观看| 你好老叔电影观看免费| 国产成人久久精品亚洲小说| 亚洲三级在线免费观看| 久久精品国产亚洲沈樵| 国产成人精品免费视频大全五级| 亚洲精品免费在线视频| 91视频免费网站| 青青青视频免费观看| 亚洲人成人伊人成综合网无码| 老司机亚洲精品影院无码| 国产亚洲老熟女视频| 国产又粗又长又硬免费视频| 日本亚洲免费无线码| 日本xxxx色视频在线观看免费| 猫咪www免费人成网站| 亚洲一线产区二线产区区| 亚洲尹人香蕉网在线视颅| 伊伊人成亚洲综合人网7777| 免费不卡中文字幕在线|