熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

從思路開始 Java如何實現條件編譯

2013-11-23 18:50:04  來源: Java核心技術 

  條件編譯絕對是一個好東西如在C或CPP中可以通過預處理語句來實現條件編譯代碼如下

  #IFDEF DEBUG
#UNDEF DEBUG
#ENDIF
#define DEBUG
#IFDEF DEBUUG
  /*
   code block
   */
#ELSE
  /*
   code block
  */
#ENDIF
  但是在JAVA中卻沒有預處理宏定義這些東西而有時在一些項目中我們又需要條件編譯那麼在JAVA中該如何實現條件編譯呢?

  我們來看一個例子

  編寫一個helloworld程序代碼如下

  public class Hello {
    public static void main(String[] args) {
        Systemoutprintln(Hello world!);
    }
}
  保存為Hellojava並編譯得到一個class文件並且觀察到文件大小是字節然後我們對這個文件進行反編譯用jdgui得到代碼如下

  import javaioPrintStream;
public class Hello
{
  public static void main(String[] paramArrayOfString)
  {
    Systemoutprintln(Hello world!);
  }
}
  得到這個有什麼用呢?

  現在我們再來對源代碼進行修改修改後的代碼如下

  public class Hello {
    public static void main(String[] args) {
        if(false) {
            Systemoutprintln(Hello world!);
        }
    }
}
  進行編譯這時我們再看它的大小只有字節怎樣?想到什麼了吧?沒錯編譯器會對代碼進行優化對於條件永遠為false的語句JAVA編譯器將不會對其生成字節碼下面我們再來對該class文件進行反編譯果然代碼如下

  public class Hello
{
  public static void main(String[] paramArrayOfString)
  {
  }
}

  利用JAVA編譯的這一優化機制我們就可以實現JAVA的條件編譯了

  public class Hello {
    public static void main(String[] args) {
        if(false) {
            Systemoutprintln(Hello world!);
        }
    }
}
  定義一個final的變量然後再在if語句中使用代碼如下

  public class Hello {
    public static void main(String[] args) {
        final boolean DEBUG = true;
        if(DEBUG) {
            Systemoutprintln(Hello world!);
        }
    }
}
  當條件編譯使用得多時上面將極不利於代碼的修改及維護這時就可以用一種更為靈活的方法定義一個靜態類裡面專門定義用來控制條件編譯的變量然後再在具體的代碼中導入該類使用這些final變量代碼如下

  public class DebugConfig {
    public static final boolean BLUETOOTH_DEBUG = false;
    public static final boolean WIRELESS_DEBUG = false;
}
if ( DebugConfigBLUETOOTH_DEBUG) {
    // TODO
}


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25823.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.