程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 從思路開始 Java如何實現條件編譯

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

編輯:關於JAVA

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

  1. #IFDEF DEBUG
  2. #UNDEF DEBUG
  3. #ENDIF
  4. #define DEBUG
  5. #IFDEF DEBUUG
  6. /*
  7. code block 1
  8. */
  9. #ELSE
  10. /*
  11. code block 2
  12. */
  13. #ENDIF

但是在JAVA中卻沒有預處理,宏定義這些東西,而有時在一些項目中,我們又需要條件編譯。那麼,在Java中,該如何實現條件編譯呢?

我們來看一個例子。

編寫一個helloworld程序。代碼如下:

  1. public class Hello {
  2. public static void main(String[] args) {
  3. System.out.println("Hello, world!");
  4. }
  5. }

保存為Hello.Java並編譯,得到一個class文件,並且觀察到文件大小是417字節。然後我們對這個文件進行反編譯,用jd-gui。得到代碼如下:

  1. import Java.io.PrintStream;
  2. public class Hello
  3. {
  4. public static void main(String[] paramArrayOfString)
  5. {
  6. System.out.println("Hello, world!");
  7. }
  8. }

得到這個有什麼用呢?

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

  1. public class Hello {
  2. public static void main(String[] args) {
  3. if(false) {
  4. System.out.println("Hello, world!");
  5. }
  6. }
  7. }

進行編譯,這時我們再看它的大小,只有255字節。怎樣?想到什麼了吧?沒錯,編譯器會對代碼進行優化,對於條件永遠為false的語句,Java編譯器將不會對其生成字節碼。下面我們再來對該class文件進行反編譯,果然代碼如下:

  1. public class Hello
  2. {
  3. public static void main(String[] paramArrayOfString)
  4. {
  5. }
  6. }

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

  1. public class Hello {
  2. public static void main(String[] args) {
  3. if(false) {
  4. System.out.println("Hello, world!");
  5. }
  6. }
  7. }

定義一個final的變量,然後再在if語句中使用。代碼如下:

  1. public class Hello {
  2. public static void main(String[] args) {
  3. final boolean DEBUG = true;
  4. if(DEBUG) {
  5. System.out.println("Hello, world!");
  6. }
  7. }
  8. }

當條件編譯使用得多時,上面將極不利於代碼的修改及維護,這時就可以用一種更為靈活的方法。定義一個靜態類,裡面專門定義用來控制條件編譯的變量。然後再在具體的代碼中導入該類,使用這些final變量。代碼如下:

  1. public class DebugConfig {
  2. public static final boolean BLUETOOTH_DEBUG = false;
  3. public static final boolean WIRELESS_DEBUG = false;
  4. }
  1. if ( DebugConfig.BLUETOOTH_DEBUG) {
  2. // TODO
  3. }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved