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
版權宣告:本文為博主原創文章,轉載請附上博文連結!