1. 程式人生 > >java實現條件編譯

java實現條件編譯

C程式碼  
#IFDEF DEBUG  
#UNDEF DEBUG  
#ENDIF  
#define DEBUG  
#IFDEF DEBUUG  
  /* 
   code block 1 
   */   
#ELSE  
  /* 
   code block 2 
  */  
#ENDIF  


  但是在JAVA中卻沒有預處理,巨集定義這些東西,而有時在一些專案中,我們可能需要條件編譯。那麼,在JAVA中,該如何實現條件編譯呢?
  我們來看一個例子。
  編寫一個helloworld程式。程式碼如下:
Java程式碼  
public class Hello {  
    public static void main(String[] args) {  
        System.out.println("Hello, world!");  
    }  
}  


  儲存為Hello.java並編譯,得到一個class檔案,並且觀察到檔案大小是417位元組。然後我們對這個檔案進行反編譯,用jd-gui。得到程式碼如下:
Java程式碼  
import java.io.PrintStream;  
  
public class Hello  
{  
  public static void main(String[] paramArrayOfString)  
  {  
    System.out.println("Hello, world!");  
  }  
}  


  得到這個有什麼用呢?
  現在我們再來對原始碼進行修改,修改後的程式碼如下。
Java程式碼  
public class Hello {  
    public static void main(String[] args) {  
        if(false) {  
            System.out.println("Hello, world!");  
        }  
    }  
}  


  進行編譯,這時我們再看它的大小,只有255位元組。怎樣?想到什麼了吧?沒錯,編譯器會對程式碼進行優化,對於條件永遠為false的語句,JAVA編譯器將不會對其生成位元組碼。下面我們再來對該class檔案進行反編譯,果然程式碼如下:
Java程式碼  
public class Hello  
{  
  public static void main(String[] paramArrayOfString)  
  {  
  }  
}  


  利用JAVA編譯的這一優化機制,我們就可以實現JAVA的條件編譯了。
Java程式碼  
public class Hello {  
    public static void main(String[] args) {  
        if(false) {  
            System.out.println("Hello, world!");  
        }  
    }  
}  


  定義一個final的變數,然後再在if語句中使用。程式碼如下:
Java程式碼  
public class Hello {  
    public static void main(String[] args) {  
        final boolean DEBUG = true;  
        if(DEBUG) {  
            System.out.println("Hello, world!");  
        }  
    }  
}  


  當條件編譯使用得多時,上面將極不利於程式碼的修改及維護,這時就可以用一種更為靈活的方法。定義一個靜態類,裡面專門定義用來控制條件編譯的變數。然後再在具體的程式碼中匯入該類,使用這些final變數。程式碼如下:
Java程式碼  
public class DebugConfig {  
    public static final boolean BLUETOOTH_DEBUG = false;  
    public static final boolean WIRELESS_DEBUG = false;  
}  

Java程式碼  
if ( DebugConfig.BLUETOOTH_DEBUG) {  
    // TODO   
}  
--------------------- 
作者:郭風樸 
來源:CSDN 
原文:https://blog.csdn.net/Guofengpu/article/details/51104185 
版權宣告:本文為博主原創文章,轉載請附上博文連結!